如何在一个区间内循环遍历双精度的每个值?

use*_*413 3 c++ double epsilon

在这里读到并得出结论,double的最小值(绝对值)是,1.7e-308但我的代码永远循环:

for (double d(-1.0); d <= 1.0; d+=1.7e-308)
{
}
Run Code Online (Sandbox Code Playgroud)

编辑:我想以尽可能小的增量从-1.0循环到1.0.

sba*_*bbi 9

在C++ 11/C99中,您可以使用nextafter获取下一个可表示的数字.

#include <cmath>

for (double d(-1.0); d <= 1.0; d = std::nextafter(d, 1.0) )
{
}
Run Code Online (Sandbox Code Playgroud)

此外,如果我正确地进行了数学计算,则在-1和1之间存在大约10 ^ 18个可表示的值.

通过合理假设每秒10 ^ 6个周期,执行此计算将花费32000年.