#include <stdio.h>
#define SQR(X) X*X int main(int argc, char* argv[])
{
int a = ;
int k = ;
int m = ; printf("SQR(k+m) = %d\n", SQR(k+m)); //SQR(k+m) = 5
printf("SQR(k+m)/SQR(k+m) = %d\n", SQR(k+m)/SQR(k+m)); //SQR(k+m)/SQR(k+m) = 7
printf("SQR(k+m)/SQR(k+m) = %.2f\n", 1.0*SQR(k+m)/SQR(k+m)); //SQR(k+m)/SQR(k+m) = 7.00
printf("SQR(k+m)/SQR(k+m) = %.2f\n", SQR(k+1.0*m)/SQR(k+m)); //SQR(k+m)/SQR(k+m) = 7.50
printf("a/(SQR(k+m)/SQR(k+m)) = %d\n", a/(SQR(k+m)/SQR(k+m))); //a/(SQR(k+m)/SQR(k+m)) = 1
printf("1.0*a/(SQR(k+m)/SQR(k+m)) = %.2f\n",1.0*a/(SQR(k+m)/SQR(k+m)));//1.0*a/(SQR(k+m)/SQR(k+m)) = 1.43 return ;
} /*
SQR(k+m) = 5
SQR(k+m)/SQR(k+m) = 7
SQR(k+m)/SQR(k+m) = 7.00
SQR(k+m)/SQR(k+m) = 7.50
a/(SQR(k+m)/SQR(k+m)) = 1
1.0*a/(SQR(k+m)/SQR(k+m)) = 1.43 以上测试得:
SQR(k+m)/SQR(k+m)表达式展开替换为: 1.0*SQR(k+m)/SQR(k+m)表达式展开替换为:
k+m*k+m/k+m*k+m = 2 + 1*2 +1/2 +1*2 + 1 1.0*k+m*k+m/k+m*k+m = 1.0*2 + 1*2 +1/2 +1*2 + 1
= 2 + 1 + 1/2 + 3 + 1 = 2.0 + 1 + 1/2 + 3 + 1
= 3 + 1/2 + 4 = 2.0 + 1 + 0 + 3 + 1
= 3 + 0 + 4 = 2.0 + 5
=7 = 7.0
1.0*(SQR(k+m)/SQR(k+m))表达式展开替换为:
= 1.0*(k+m*k+m/k+m*k+m )
= 1.0 * 7
= 7.0
SQR(k+1.0*m)/SQR(k+m) =
= k+1.0*m*k+1.0*m/k+m*k+m
= 2 + 1.0*2 + 1.0/2 + 1*2 + 1
= 2 + 2.0 + 0.5 + 2 + 1
= 2.0 + 2.0 + 0.5 + 2.0 + 1.0
= 7.50
总结:
define定义的宏变量(以及相应的头文件等),在编译前进行代码替换,注意仅仅是代码替换,并不涉及到运算符等的操作,因为运算符操
作是在编译阶段进行的
define 只是定义而已,在编择时只是进行简单代换而已,并不经过任何其他的处理(例如:加减等运算或者是附加括号等的结合性干预)
表达式中的运算是按“块”来分步运算的,各个块中按照块中各成员精度最高者运算并按照最高精度得出结果。 */

#define与运算精度问题探究

扩展阅读:C/C++源代码到可执行程序的过程详解

#define与运算精度问题探究的更多相关文章

  1. 关于java中Double类型的运算精度问题

    标题     在Java中实现浮点数的精确计算    AYellow(原作) 修改    关键字     Java 浮点数 精确计算   问题的提出:如果我们编译运行下面这个程序会看到什么?publi ...

  2. 关于java中Double类型的运算精度问题(转)

    Java Java double:浮点数:精确计算  public class Test{    public static void main(String args[]){        Syst ...

  3. JavaScript 浮点数及运算精度调整总结

    JavaScript 浮点数及运算精度调整总结 JavaScript 只有一种数字类型 Number,而且在Javascript中所有的数字都是以IEEE-754标准格式表示的.浮点数的精度问题不是J ...

  4. PHP浮点数运算精度造成的,订单金额支付经常少1分的问题

    最近碰见一个奇怪的问题,商城通过微信支付的订单经常少一分钱,经过排查是PHP浮点运算精度问题造成的 由PHP浮点数运算精度造成的,鸟哥的Bolg有详细的说明.http://www.laruence.c ...

  5. 搞懂js中小数运算精度问题原因及解决办法

    js小数运算会出现精度问题 js number类型 JS 数字类型只有number类型,number类型相当于其他强类型语言中的double类型(双精度浮点型),不区分浮点型和整数型. number类 ...

  6. 简单BigDecimal运算精度

    项目中遇到了数值运算,如网上所写的,一般有这几个方法: /** * 提供精确的加法运算. * @param v1 被加数 * @param v2 加数 * @return 两个参数的和 */ publ ...

  7. JavaScript 浮点数运算 精度问题

    JavaScript小数在做四则运算时,精度会丢失,这会在项目中引起诸多不便,先请看下面脚本. //加减 <script type="text/javascript" lan ...

  8. js float运算精度问题

    先放个前辈的文章:JavaScript数字精度丢失问题总结 今天遇到了19.99*100的问题,答案不等于1999,因为在javascript中浮点数的计算是以2进制计算的.自己写了一波解决方法(不能 ...

  9. Java使用BigDecimal保留double、float运算精度、保留指定位数有效数字、四舍五入

    工具类 package --; import java.math.BigDecimal; /** * Created by kongqw on 2015/12/10. */ public final ...

随机推荐

  1. 源码安装mysql-5.6.32.tar.gz

    http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.32.tar.gz 安装依赖包: #yum install wget bison gcc gcc-c ...

  2. C++查询网站

    1.C++外文api查询 http://www.cplusplus.com/ 2.https://isocpp.org/ 3.Juce学习 http://www.thinksaas.cn/favori ...

  3. SVN服务器搭建和使用(三)(转载)

    转载地址:http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2408089.html 接下来,试试用TortoiseSVN修改文件,添加文件, ...

  4. Java Hour 27 Concurrent

    有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. 27 Hours. 本小时主要过一下多线程相关的基本API. Defining ...

  5. 利用OData轻易实现串流数据的可视化

    OData(开放数据协议,Open Data Protocol)一直是我喜欢一种的标准(OASIS 标准),它基于RESTful协议提供了一种强大的查询和编辑数据的访问接口.虽然是微软推出的,不过在诞 ...

  6. FFmpeg源代码结构图

    转自:http://blog.csdn.net/leixiaohua1020/article/details/44220151 FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码 ...

  7. 实例讲解虚拟机3种网络模式(桥接、nat、Host-only)

    转自:http://www.cnblogs.com/ggjucheng/archive/2012/08/19/2646007.html 前言 很多人安装虚拟机的时候,经常遇到不能上网的问题,而vmwa ...

  8. Gym 100971D Laying Cables 单调栈

    Description One-dimensional country has n cities, the i-th of which is located at the point xi and h ...

  9. MS SQL SERVER 2000 常用 Tran-SQL 语句

    一.创建数据库:create database mydb-创建数据库mydbon primary-在primary文件组中( name = mydb_data1,filename = 'd:\sql ...

  10. hadoop1.2.1的namenode格式化失败的问题

    最近要开始找工作,就在原来搭建好的hadoop1.2.1的伪分布式跑跑mapreduce 很久没用,就想着格式化一下namode,结果: Format aborted in /uar/local/ha ...