-3

在我必须照顾的很长的程序中传播 NaN 值时,我遇到了很多问题。经过多次单步执行后,我发现在某些时候有一个变量的值由调试器显示为Infinity,还有另一个变量除以这个 Infinity 变量,结果为 NaN。这种行为是正确的,还是应该导致 0?所有的变量都是double变量。

4

2 回答 2

1

想想分裂的本质。

4/5

意味着你有四个东西,你把它分成 5 块。结果是其中一件的大小。

4/infinity

意味着你有四个东西,你把它分成无限小的部分。永远不可能是0因为数字是continuous,所以这是NaN因为你永远不会停止分发那些碎片4,来衡量其中的一件。

于 2013-10-10T07:52:48.783 回答
1

Java中的无穷大除法是NaN吗?

最简洁的答案是不。

Java 语言规范 ( JLS 15.17.2 ) 说:

“有限值除以无限会导致有符号零。”

它还提到这是“由 IEEE 754 算术规则确定的”。除以无穷大得出 NaN 的唯一情况是当您将无穷大除以无穷大时。(与上述相同的参考。)


如果您(真的)看到不同,那么您的 Java“平台” 1中有一个错误。但这将是一件非同寻常的事情,因此在称“错误”之前,您需要真正彻底地检查您的证据和方法。

1 - ...最有可能在浮点硬件中!

于 2013-10-10T08:08:39.160 回答