如何测试double值是否为负值

时间:2016-11-09 16:05:05

标签: c++ c++11 double

我没有谷歌这个,所以我问如何正确和确凿地测试双值大于或等于0。

我在某种程度上意识到双重问题的零值(±0.0等等),我需要检查我的双变量是否大于或等于0.否则,如果它不是负的话可能更好。< / p>

问题是,我可以这样测试:
if(myDoubleValue >= 0.0)(我认为这可能有问题)
或者会是更好的事情:
if(!(myDoubleValue < 0.0))

抱歉可能是愚蠢的问题。

3 个答案:

答案 0 :(得分:3)

值±0仅表示值是否从负值或正值接近0(当然,这不是每种情况的保证)。但是,它仍然 0。

因此,x >= 0将包括+0和-0零。您可以在一个简单的程序中为自己测试。 :)

IEEE754 standard中明确指出

  

比较应忽略零的符号(所以+0 = -0)。

大多数处理器和实现都使用IEEE754,因此出于所有实际目的,-0 >= 0都是正确的。

对于任何数字x,x >= 0!(x < 0)都是相同的。对于+0和-0也是如此。

正如aschepler在comment中指出的那样,当x为NaN(非数字)时,两个测试x >= 0!(x < 0)会有所不同。 NaN总是与任何实数不同,因此当x是NaN时,!(x < 0)将为真。 如果计算中出现NaN,您可能需要单独处理。

答案 1 :(得分:0)

我相信this article可能会回答您的问题。零有自己的不可互换的表示。值是正还是负由 sign 位表示。

引用文章:

  

如果每个位为零(符号位不相关),则该数字被视为零。

因此,正/负零必须对比较操作没有影响 - 它仍然是零。

答案 2 :(得分:0)

是的,你可以测试两个 if(myDoubleValue&gt; = 0.0)

if(!(myDoubleValue&lt; 0.0))