设为首页 加入收藏

TOP

13.3.1 宏定义(硬编码)方式
2013-10-07 00:52:47 来源: 作者: 【 】 浏览:69
Tags:13.3.1 定义 编码 方式

13.3  获取数学常量

在数学计算中常需要一些常量,与大多数需要测量才能确定(因而精度有限)的物理常量不同,数学常量不存在精度问题,或者说它们具有无限的精度。但由于一些常数有无限的有效位数,而在实际计算中只能取有限位,所以导致计算结果出现偏差。因此,尽可能地获取满足精度要求的数学常量是无法避免的要求。

下面以数学常数π为例说明获取常数的几种方式。

13.3.1  宏定义(硬编码)方式

下面的语句在一些代码中是相当常见的:

  1. #define MATH_PI    3.1415926 

实际上π是无理数,有无限位,此处只有8位,仅够单精度浮点数(即float类型)的精度,肯定会带入一些计算误差,虽然可能影响不大。如果这个宏用于双精度浮点数计算,则引入的误差将使双精度数运算毫无意义。你需要定义更高的MATH_PI,例如:

  1. #define MATH_PI    3.1415926535897931L 
这种方式带来的问题就是大多数硬编码所面对的问题,即维护困难。如果代码中存在多个类似的数学常数,还会产生一致性问题。在一些特殊情况下,例如可变精度计算时,这种方式无法使用。因为计算的精度可变,硬编码设置的精度要么过低要么过高,而这会破坏精度一致性。
【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇13.4.3 通过附加因子避免极值 下一篇13.4.2 通过检测避免极值

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: