我忽略了在库中阅读和其他一些东西,但是我想知道下面的代码需要多长时间才能运行,我在大约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中减去,次数如你所愿,结果将保持不变。