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.
在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年.