java无穷大 inf_java – 为什么浮点数无穷大,不像NaN,等于?

博客探讨了IEEE754浮点数标准中Double.POSITIVE_INFINITY的含义,指出其作为计算结果的近似值是合理的。文章强调NaN的特殊行为与无穷大不同,无穷大在某些计算场景下等价于自身,这有助于简化测试。同时,文章讨论了除零操作为何可能产生Infinity,以及NaN的存在和用途。
摘要由CSDN通过智能技术生成

你的推理是Double.POSITIVE_INFINITY不应该等于它自己,因为它是“可能”已经获得作为精度的损失的结果。

这一推理适用于所有浮点。作为不准确操作的结果,可以获得任何有限值。这并没有推动IEEE 754标准化委员会将==定义为总是对有限值求值为假,为什么无穷大不同?

如所定义的,==对于理解它所做的事(即,测试已获得的浮点值,而不是通过真实计算获得的值)是有用的。对于任何理解它的人,你需要理解它使用浮点,即使对于不涉及无穷大的计算,Double.POSITIVE_INFINITY == Double.POSITIVE_INFINITY求值为true是方便的,如果只测试是否浮点浮点计算的结果为Double.POSITIVE_INFINITY。

这留下了为什么NaN可以承担有特殊行为的问题,无限性应该遵循与有限值相同的一般原则。 NaN不等于无穷大:IEEE 754标准的基本原理是值正好是它们是什么,但是操作的结果可以相对于实际结果近似,并且在这种情况下,得到的浮点值根据舍入模式获得。

忘记1.0 / 0.0被定义为inf的瞬间,这在本讨论中是一个烦恼。请考虑Double.POSITIVE_INFINITY的时刻,仅作为操作结果,例如1.0e100 / 1.0e-300或Double.MAX_VALUE Double.MAX_VALUE。对于这些操作,inf是真实结果的最接近的近似,就像产生有限结果的操作一样。相反,NaN是当操作没有意义时获得的结果。它是可以保护的NaN行为特别,但inf只是所有的值太大的代表的近似。

在现实中,1.0 / 0.0也产生inf,但应该被认为是一个例外。将操作的结果定义为NaN,但将其定义为inf在实现一些算法方面更加方便,这一点也是一致的。在Kahan’s notes中提供了第10页的一个示例。比大多数人希望的更多细节在article “Branch Cuts for Complex Elementary Functions, or Much Ado About Nothing’s Sign Bit”中。我还将解释在IEEE 754中存在与NaN标记分开的“除零”标记,作为用户可能想要的识别特别地,虽然它不被定义为生产NaN,以处理零。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值