#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 ...
随机推荐
- p188习题2
- 开启InnoDB每表一个独立的表空间
mysql> show variables like '%innodb%'; +---------------------------------+----------------------- ...
- Mysql or Mongodb LBS快速实现方案
http://www.wubiao.info/470 前两篇文章: 查找附近的xxx 球面距离以及Geohash方案探讨 (http://www.wubiao.info/372) 微信.陌陌 架构方案 ...
- GDB调试笔记
参考资料:GDB调试精粹及使用实例 # 调试实例 #include <iostream> #include <cstring> using namespace std; ][] ...
- C++的那些事:容器和泛型算法
一.顺序容器 1,标准库定义了3种类型的顺序容器:vector.list和deque.它们的差别主要在于访问元素的方式,以及添加或删除元素相关操作运算代价.标准库还提供了三种容器适配器:stack.q ...
- lr_save_var字符串截取总结
函数作用: 将一个变化长度的字符串保存到parameter中. 用法实例: 此处讲解函数: Action() { web_save_timestamp_param("tStamp&q ...
- linux全部命令
linux全部命令 一.安装和登陆命令1.进入图形界面startx 2.进入图形界面init 5 3.进入字符界面init 3 4.登陆login 5.关机poweroff-p 关闭机器的时候关闭电源 ...
- C# MarshalByRefObject 和Serializable的区别
这两种方式的类一般都是用于远程传输时使用. marshalbyrefobject是通过引用传递serializable是通过值传递,现在就来分析下什么是引用传递,什么是值传递. 理解这个对Remoti ...
- SU Demos-02Filtering-06Sukfilter
本demo中数学原理纯粹不知道,看来以后需要抓紧时间补课了,只附图. 运行结果图如下:
- node相关--代码共享
代码共享问题: 是否值得在两个环境中运行同一份代码: //看项目 依赖的API是否在两个环境中都有或有替代: 浏览器提供的标准API:XMLHttpRequest.WebSocket.DOM.canv ...