DBL_MAX - DBL_MIN等于DBL_MIN需要多长时间?



我忽略了在库中阅读和其他一些东西,但是我想知道下面的代码需要多长时间才能运行,我在大约15分钟后停止了它,因为我的计算机认为这是一个病毒。

int main(){
double min = __DBL_MIN__;
double current = __DBL_MAX__;
while ( current > min ){
current = current - min;
}

永远。
current - min轮询current

浮点数以浮点有效位存储值。不要期望指数值相差很大的值能精确地执行减法。

详细说明@chux的(正确)答案:

一个典型的double将具有大约从10-308到10+308的正数范围。但是它只有大约16位有效数字。

这意味着对于一个接近10+308的数字,你所能减去的能改变值的最小数字大约是10(308-16)= 10292

这只是一个粗略的近似值,但在这个附近的某个地方是一个下限,任何小于这个极限的数字都可以从10308中减去,次数如你所愿,结果将保持不变。

相关内容

  • 没有找到相关文章

最新更新