我没有谷歌这个,所以我问如何正确和确凿地测试双值大于或等于0。
我在某种程度上意识到双重问题的零值(±0.0等等),我需要检查我的双变量是否大于或等于0.否则,如果它不是负的话可能更好。< / p>
问题是,我可以这样测试:
if(myDoubleValue >= 0.0)
(我认为这可能有问题)
或者会是更好的事情:
if(!(myDoubleValue < 0.0))
抱歉可能是愚蠢的问题。
答案 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))