c++ - 如何测试 double 值是否不为负

标签 c++ c++11 double

我没有用谷歌搜索这个,所以我想问一下如何正确和最终测试 double 值是否大于或等于 0。

我不知何故知道 double 零值(± 0.0 等),我需要检查我的 double 变量是否大于或等于 0。否则,如果它不是负数,可能会更好。

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

抱歉,这个问题可能很愚蠢。

最佳答案

值 ±0 仅表示该值是从负值还是正值趋近于 0(当然,这并不是对所有情况的保证)。然而,它仍然 0。

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

IEEE754 standard ,它明确表示

Comparisons shall ignore the sign of zero (so +0 = -0).

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

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


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

关于c++ - 如何测试 double 值是否不为负,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40511246/

相关文章:

安卓 : How to get the preferred (native) audio buffer size and audio sample rate in C/C++?

c++ - 没有显式定义的构造函数时,为什么可以创建对象?

c++ - 为什么我得到的 deque 的 max_size() 小于 vector 的 max_size()?

c++ - 如果初始化需要shared_from_this,如何在一次调用中构建一个类?

c++ - C/C++ 中的定宽 float

c++ - 来自指针 vector 的 OpenGL 数组缓冲区

c++ - std::enable_shared_from_this:是否允许在析构函数中调用 shared_from_this()?

c++ - 什么取代了 asio::tcp::resolver::query?

swift - 使用 Swift 查找 Double 有多少个数字

c++ - double 值的精度错误