在无穷无尽的划分java中的NaN?

时间:2013-10-10 07:48:37

标签: java android nan

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

2 个答案:

答案 0 :(得分:1)

考虑分裂的本质。

4/5

意味着你有四件事,你将它分成5件。结果就是其中一件的大小。

4/infinity

意味着你有四个东西,而你将它分成无限小块。它永远不会是0,因为数字是continuous,因为你永远不会发布NaN的那些部分来衡量其中一个部分。

答案 1 :(得分:1)

  

在无穷大中划分为java中的NaN吗?

简短的回答是否。

Java语言规范(JLS 15.17.2)说:

  

“通过无穷大划分有限值会导致有符号的零。”

它还提到这是“由IEEE 754算术规则决定的”。 无穷大除法给出NaN的唯一情况是将无穷大除以无穷大。 (与上述相同。)


如果您(真的)看到的不同,那么您的Java“平台” 1 中就会出现错误。但这将是一件非同寻常的事情,所以你需要在调用“bug”之前检查你的证据和方法非常彻底

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