设为首页 加入收藏

TOP

13.3.3 算法方式
2013-10-07 00:52:36 来源: 作者: 【 】 浏览:72
Tags:13.3.3 算法 方式

13.3.3  算法方式

算法方式有简单的,也有复杂的。简单的只需调用一个数学函数即可得到有关的常数,复杂的则需实现专用算法。

(1)使用函数库

如果你的系统有数学函数库,那么用下列语句即可得到π:

  1. double MATH_PI = 2.0* acos(0.0); 

这种方式的优点是实现简单,而且获得的数学常量的精度与数学函数库的精度是一致的。需要注意的是要注意选择库函数和输入参数。尽量选择收敛快、精度高的函数,选择输入参数时也是如此。例如:

  1. double MATH_PI = 2.0* asin(1.0);  
  2. double MATH_PI = 4.0* atan(1.0); 

也可以返回同样的结果,但许多asin()是基于atan()实现的,因此使用asin()的效率没有atan()高。不过,使用atan()要注意定义域,当输入参数趋于无穷时,atan()的计算精度大幅度下降。

(2)专用算法

如果由于某些原因无法使用函数库,或者在某些地方要求的精度超出了函数库所能达到的精度,那么需要实现一些算法。如果要求的精度超过了常规浮点格式(例如双精度格式)的精度,那么还需要实现更高的浮点格式及其加、减、乘、除和开方运算,例如CSuperFloat。

不同的数学常数有不同的计算方法,有些常数(例如π)还有专用的快速算法。不过,快速算法有时有些晦涩或较难实现,因此需要根据需求决定是否使用,不可一味追求速度,带来不必要的开发难度。

4.5节和6.5节用同一种算法针对不同数据类型实现了π的计算,有兴趣的读者可以参阅。

在附带源码的Other目录下有一个PI工程,它通过递归计算内接圆面积计算π。

【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇13.4.1 问题的提出 下一篇13.3.2 硬件方式

评论

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