Java理论与实践:您的小数点在哪?(二)

2014-11-23 23:22:36 · 作者: · 浏览: 1
/b - 1) < epsilon”,这种方法比简单地比较两者之
差要更准确)。甚至测试看一个值是比零大还是比零小也存在危险 “以为”会生成比零略
大值的计算事实上可能由于积累的舍入误差会生成略微比零小的数字。

  NaN 的无序性质使得在比较浮点数时更容易发生错误。当比较浮点数时,围绕无穷大
和 NaN 问题,一种避免 gotcha 的经验法则是显式地测试值的有效性,而不是试图排除
无效值。在清单 1 中,有两个可能的用于特性的 setter 的实现,该特性只能接受非负
数值。第一个实现会接受 NaN,第二个不会。第二种形式比较好,因为它显式地检测了您
认为有效的值的范围。

  清单 1. 需要非负浮点值的较好办法和较差办法

// Trying to test by exclusion -- this doesnt catch NaN or infinity