极度郁闷
第一组:acos(0.0190938/0.0190938)
acos(0.131931/0.131931)
计算的结果是:接近0的一非常小的数(弧度).这个没问题
第二组:
acos(0.0190937/0.0190937)
acos(0.13193/0.13193)
计算的结果就变成: 1.#QNAN01.#QNAN0
我用的是double类型,分子分母是程序计算出的数据,这里我把它提出来了(注,位数和最后一位有点不同)
,谁能告诉我这是为什么啊???天啊~~~~~~~~:'( 不用讨论为什么。因为计算机是数值运算,不是一切都和理论一样,因为存在
数值误差。尤其是在函数的不连续点上。建议,当某个数x和1的差的绝对值小于
某个极小数(比如1.0e-6)的时候,那么直接定义acos(x)=0。这种例子在数值计算中
经常遇见。所以,这也算是数字计算里面的一个小窍门而且是必须知道的。 谢谢这位朋友的建议,实在没办法,也只能这样定义了.:(
页:
[1]