【发布时间】:2019-03-26 04:11:12
【问题描述】:
我遇到了这段代码,它用gcc 发出警告:
float f;
// Calculate a value for f
if (!f == 0.0)
{
// Handle it being non-zero
}
这可能只是另一个团队成员的错字,检查代码的真正含义是:
if (f != 0.0)
// OR
if (!(f == 0.0))
我已经更正了代码,但我只是想知道!NaN 的评估结果是什么。我们在if 中使用f 值,因此我们不希望NaNs 通过检查。
【问题讨论】:
-
请记住,由于浮点计算的不精确性,
f != 0.0可能还不够。你很可能会在那里need an epsilon。 -
f是否在条件之前被初始化?是什么让您认为f的值是 NaN?你会收到什么警告? -
f永远不应该是NaN(除非宇宙射线旋转一两点!) - 这是为了我自己的求知欲,而不是真正的活虫,因此 language-lawyer 标签. -
足够好。这只是一个一般性警告,因为在测试时我们可以在
f中预期的唯一信息// Calculate a value for f表明涉及一些数学。 NaN 是一种具有多种形状的奇怪野兽。期待看到语言律师在回应!NaN的含义时会提出什么(如果有的话)。 -
!f是bool
标签: c++ floating-point language-lawyer nan