如果你一次又一次地增加一个浮点数,从0
开始,它会在哪里停止?
float myfloat = 0.0;
float lastfloat = -1;
while(lastfloat != myfloat) {
lastfloat = myfloat;
myfloat += 1.0;
}
cout << "myfloat: " << myfloat << endl;
澄清:通过停止,我决定浮动的价值何时停止改变。在某些时候,浮点值达到一个值,因此它不能表示更高的值。我想知道这个价值。我不能二进制搜索它,因为没有明确的差异,运行代码来查找可能需要很长时间,特别是对于64位浮点数。
答案 0 :(得分:2)
永远不会停止;最终,myfloat
将是如此之大,以至于添加1将不会改变它(如果你希望通过某种溢出错误来阻止循环)。由于你没有其他停止循环的机制,它不会。
答案 1 :(得分:-1)
常规签名浮点数具有以下字节分段:
你需要经过的增量为2 ^ 8位,相当于 2 ^(16 * 8-1)= 1.7014 * 10 ^ 38
你将不得不迭代1.704 * 10 ^ 38次然后才会回到浮动的负面,即 2 ^ - (16 * 8-2)= 1.1754 ^ 38