我有一个程序,我需要将一个变量设置为 C++ 中可表示的最低(非无限) double float 。我如何才能将变量设置为最低的 double 浮点值?
我尝试使用 std::numeric_limits。我没有使用 C++11,所以我无法尝试使用 lowest() 函数。我尝试使用 max(),但当我尝试时,它返回了无穷大。我还尝试从 max() 中减去一个值,希望我能得到一个可表示的数字。
double max_value = std::numeric_limits<double>::max();
cout << "Test 1: " << max_value << endl;
max_value = max_value - 1;
cout << "Test 2: " << max_value << endl;
double low_value = - std::numeric_limits<double>::max();
cout << "Test 3: " << low_value << endl;
cout << "Test 4: " << low_value + 1 << endl;
输出:
Test 1: inf
Test 2: inf
Test 3: -inf
Test 4: -inf
如何将上例中的 low_value 设置为最低的可表示 double 值?
最佳答案
一旦你有了 -inf(你得到它),你就可以用 nextafter 得到最小的有限值。在 (-inf,0) 上运行。
编辑:根据上下文,如果 DBL_MAX
以十进制表示(因此以不精确的方式),这可能比 -DBL_MAX
更好。但是,C 标准要求以默认舍入模式(即最接近)评估 float 常量。在 GCC 的特殊情况下,DBL_MAX
是一个转换为 double 的 long double 值;但是 long double 值似乎有足够的数字,因此一旦从 decimal 转换为 long double,该值就可以精确地表示为 double,因此转换是精确的,并且事件舍入模式不会影响它。如您所见,这是相当棘手的,人们可能想在各种平台上检查它在任何上下文中是否正确。以类似的方式,我严重怀疑 GCC 在 PowerPC 上定义 DBL_EPSILON
的正确性(其中 long double 类型实现为 double-double arithmetic ),因为有很多 long double 值非常接近二的幂。
关于c++ - 如何在 C++ 中获取最低可表示浮点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24683930/