我一直遇到很多问题,NaN值在我需要照顾的很长的程序中传播。经过多次单步操作后,我发现在某些时候有一个变量,其值由调试器显示为Infinity
,还有另一个变量被该Infinity变量除,这导致NaN。这种行为是正确的,还是应该导致0?所有变量都是double
变量。
答案 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 - ...最有可能在浮点硬件!