c++ - 大于 -DBL_MAX 的最小负数

标签 c++

我代表一个“物理上不可能”的值,在计算机上可能代表的最负值。

#include <float.h>
double physically_impossible = -DBL_MAX;

这个测试效果很好

if( physically_impossible == -DBL_MAX )
    cout << " OK, detected impossible value";
else
    cout << " failed to detect impossible value";
cout << endl;

给予

 OK, detected impossible value

但是当我尝试测试一个非常小但“物理上可能”的数字时,出现了可怕的错误。

double physically_impossible_plus_one = 1 - DBL_MAX;
cout << "physically_impossible " << physically_impossible << " physically_impossible_plus_one " << physically_impossible_plus_one;
if( physically_impossible < physically_impossible_plus_one )
    cout << " OK, detected impossible value plus one";
else
    cout << " failed to detect impossible value plus one";
cout << endl;

给予

physically_impossible -1.79769e+308 physically_impossible_plus_one -1.79769e+308 failed to detect impossible value plus one

正如 Karoly Horvath 指出的那样,由于精度有限,此方法失败了。我需要的是大于 -DBL_MAX 的最小负数

(动机:我想将数字(不是引发异常和触发断言的 NAN)划分为物理上可能的和物理上不可能的,同时尽量减少物理上可能数字的可用范围。)

最佳答案

浮点表示的精度有限。在 -1.79769e+308 上加一显然不会改变它。

这不是问题,不用担心。如果该值表示任何物理属性,那么,接近 DBL_MAX 意味着您正在做一些非常错误的事情。

关于c++ - 大于 -DBL_MAX 的最小负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28138743/

相关文章:

c++ - 学习 C++ 的第一步

c++ - 如何在两个不同大小的 vector 中找到公共(public)数字

c++ - 从参数包中提取成员类型

c++ - 程序计算错误,类型转换

c++ - ARM 上的预取指令

c++ - 双数据类型背包

c++ - 使用静态映射和 std::make_pair 的地址处的 KERN_PROTECTION_FAILURE

c++ - 奇怪的行为 : memcpy faster 1x when src is not set value

c++ - 没有段错误为什么?返回的函数值用作参数

c++ - 我可以在不知道类型参数的情况下持有 shared_ptr 吗?