#define与运算精度问题探究
#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与运算精度问题探究的更多相关文章
- 关于java中Double类型的运算精度问题
标题 在Java中实现浮点数的精确计算 AYellow(原作) 修改 关键字 Java 浮点数 精确计算 问题的提出:如果我们编译运行下面这个程序会看到什么?publi ...
- 关于java中Double类型的运算精度问题(转)
Java Java double:浮点数:精确计算 public class Test{ public static void main(String args[]){ Syst ...
- JavaScript 浮点数及运算精度调整总结
JavaScript 浮点数及运算精度调整总结 JavaScript 只有一种数字类型 Number,而且在Javascript中所有的数字都是以IEEE-754标准格式表示的.浮点数的精度问题不是J ...
- PHP浮点数运算精度造成的,订单金额支付经常少1分的问题
最近碰见一个奇怪的问题,商城通过微信支付的订单经常少一分钱,经过排查是PHP浮点运算精度问题造成的 由PHP浮点数运算精度造成的,鸟哥的Bolg有详细的说明.http://www.laruence.c ...
- 搞懂js中小数运算精度问题原因及解决办法
js小数运算会出现精度问题 js number类型 JS 数字类型只有number类型,number类型相当于其他强类型语言中的double类型(双精度浮点型),不区分浮点型和整数型. number类 ...
- 简单BigDecimal运算精度
项目中遇到了数值运算,如网上所写的,一般有这几个方法: /** * 提供精确的加法运算. * @param v1 被加数 * @param v2 加数 * @return 两个参数的和 */ publ ...
- JavaScript 浮点数运算 精度问题
JavaScript小数在做四则运算时,精度会丢失,这会在项目中引起诸多不便,先请看下面脚本. //加减 <script type="text/javascript" lan ...
- js float运算精度问题
先放个前辈的文章:JavaScript数字精度丢失问题总结 今天遇到了19.99*100的问题,答案不等于1999,因为在javascript中浮点数的计算是以2进制计算的.自己写了一波解决方法(不能 ...
- Java使用BigDecimal保留double、float运算精度、保留指定位数有效数字、四舍五入
工具类 package --; import java.math.BigDecimal; /** * Created by kongqw on 2015/12/10. */ public final ...
随机推荐
- 如何使用Linux的Crontab定时执行PHP脚本的方法
我们的PHP程序有时候需要定时执行,我们可以使用ignore_user_abort函数或是在页面放置js让用户帮我们实现.但这两种方法都不太可靠,不稳定.我们可以借助Linux的Crontab工具来稳 ...
- 安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(六)码农网
30. 用密码保护 GRUB 用密码保护你的 boot 引导程序这样你就可以在启动时获得额外的安全保障.同时你也可以在实物层面获得保护.通过在引导时给 GRUB 加锁防止任何无授权访问来保护你的服务器 ...
- Accumulators
copy的官方programming guide的代码,只有一个要说一下,Accumulators的更新是在action做的,transformation操作中对于Accumulators的增加不会即 ...
- 关于遍历javascript 中的json串浏览器输出的结果不统一的情况
我们在做项目的时候经常会用到javascript的json. 首先说一下javascript的json串是什么,json串属于javascript的一个对象,有键和值对应的对象. 一般的格式是: a ...
- git将本地仓库上传到远程仓库
在已有的Git库中搭建新库,并且将本地的git仓库,上传到远程服务器的git库中,从而开始一个新的项目 首先,在本地新建文件夹abc,进入到abc里面,然后git init.这样就在本地初始化了一个g ...
- 数学 ACdream 1196 KIDx's Triangle
题目传送门 /* 这道题花了好长时间AC,思路有,但是表达式少写了括号一直乱码,囧! 注意:a==0时要特判:) */ #include <cstdio> #include <alg ...
- 找规律 SGU 126 Boxes
题目地址:http://acm.sgu.ru/problem.php?contest=0&problem=126 /* 找规律,智商不够,看了题解 详细解释:http://blog.csdn. ...
- POJ3659 Cell Phone Network(树上最小支配集:树型DP)
题目求一棵树的最小支配数. 支配集,即把图的点分成两个集合,所有非支配集内的点都和支配集内的某一点相邻. 听说即使是二分图,最小支配集的求解也是还没多项式算法的.而树上求最小支配集树型DP就OK了. ...
- LightOJ1051 Good or Bad(DP)
这题感觉做法应该挺多吧,数据规模那么小. 我用DP乱搞了.. dp0[i][j]表示字符串前i位能否组成末尾有连续j个元音字母 dp1[i][j]表示字符串前i位能否组成末尾有连续j个辅音字母 我的转 ...
- 详细讲解css单位px,em和rem的含义以及它们之间的区别
一.首先介绍一下px px就是css中最基本的长度单位了,用px做单位基本上没什么问题,可以做到让页面按套路精确的展现! 可但是!但可是!如果全篇用px布局会暗藏一个蛋疼的问题,就是当用户和Ctrl滚 ...