找回密码
 注册
Simdroid-非首页
查看: 101|回复: 2

[2. C/C++/C#] 极度郁闷

[复制链接]
发表于 2007-4-24 17:59:34 | 显示全部楼层 |阅读模式 来自 湖南长沙
第一组:
acos(0.0190938/0.0190938)
acos(0.131931/0.131931)
计算的结果是:接近0的一非常小的数(弧度).这个没问题
第二组:
acos(0.0190937/0.0190937)
acos(0.13193/0.13193)
计算的结果就变成: 1.#QNAN0  1.#QNAN0   
我用的是double类型,分子分母是程序计算出的数据,这里我把它提出来了(注,位数和最后一位有点不同)
,谁能告诉我这是为什么啊???天啊~~~~~~~~
发表于 2007-4-25 08:18:43 | 显示全部楼层 来自 美国
Simdroid开发平台
不用讨论为什么。因为计算机是数值运算,不是一切都和理论一样,因为存在
数值误差。尤其是在函数的不连续点上。建议,当某个数x和1的差的绝对值小于
某个极小数(比如1.0e-6)的时候,那么直接定义acos(x)=0。这种例子在数值计算中
经常遇见。所以,这也算是数字计算里面的一个小窍门而且是必须知道的。

评分

1

查看全部评分

 楼主| 发表于 2007-4-25 08:24:02 | 显示全部楼层 来自 湖南长沙
谢谢这位朋友的建议,实在没办法,也只能这样定义了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-11-1 15:31 , Processed in 0.030155 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表