回 帖 发 新 帖 刷新版面

主题:[讨论]关于实数值的判断

大家在程序中是如何判断实数值的?即一个实数是否等于某一个值?我看到一些程序中是直接if(realnum == 1.d0)这样来判断的,但也有人建议不要采用这种方法而是设定一个范围。请大家说说自己认为比较好的方法。

回复列表 (共10个回复)

沙发

if(abs(realnum - 1.d0) < 1.d-6)

板凳

 

3 楼


[quote]if(abs(realnum - 1.d0) < 1.d-6)[/quote]

您的意思就是用范围表示了?两种方法都有缺点,难以取舍啊

4 楼

什么取舍啊,基本都是用范围,因为精度问题。。。

5 楼

直接判断是否相等肯定是错的,实数都有截断误差的

6 楼

为了不要碰运气地判断, 最好用范围判断, 理由如上面几位所说.

7 楼


minpack中的hybrd中就用了很多.eq.

8 楼

多谢各位,我的程序中一个函数值达到某个条件我就把它设为1.d0,这样可能用==判断好些,先试试。

9 楼

如果确实是直接设置的一个确定的值,那可以用.eq.来判断。但此数值最好是能用二进制精确表示的,否则结果未知。

10 楼

经运算的浮点数, 在不同机器, 或者不同编译命令优化下运算结果也可能不同的. 当然不是运算出来的结果如cgl_lgs兄说的赋值而来的或者就可以.
楼主自己看着办吧, 如果将来出错那这个地方可能是一个潜在的bug.

我来回复

您尚未登录,请登录后再回复。点此登录或注册