我试图理解浮点数是如何工作的。
我想我想通过评估以下内容来测试我知道/需要学习的内容:我希望找到最小的x
,x + 1 = x
,其中x
是一个浮点数。
据我了解,这种情况会发生在x
足够大以使x + 1
比x更接近x的情况下,而下一个数字高于可由浮点表示的x。如此直观地看起来就是我在有效数字中没有足够数字的情况。这个数字x是否是有效数字为1的数字。但后来我似乎无法弄清楚指数必须是什么。显然它必须很大(相对于10 ^ 0,无论如何)。
答案 0 :(得分:5)
你只需要用指数表示尾数中LS位的值。当这是> 1然后你就满足了你的病情。对于单精度浮点数,LS位的值为2 ^ -24 * 2 ^ exp,因此当exp为>时,我将满足条件。因此,满足这个条件的最小(标准化)数将是1.0 * 2 ^ 25 = 33554432.0f。
我没有检查过这个,所以我的数学可能会偏离某个地方(例如2倍)并且FP单元也可能会超出第24位,因此可能还需要2个因子考虑到这一点,但你得到了一般的想法......
答案 1 :(得分:0)
从1.0开始,并保持加倍,直到测试成功:
double x;
for (x = 1.0; x + 1 != x; x *= 2) { }
printf("%g + 1 = %g\n", x, x + 1);
答案 2 :(得分:0)
我建议在尝试理解f-p数和f-p算法的同时,使用有效数字中的5位数和指数中的2位数。 (或者,如果5和2不适合你,6和3或你喜欢的任何其他小数字。)问题:
更容易理解十进制,你学到的课程完全是一般的。一旦你弄明白这一点,用IEEE f-p算法增强你的知识将是相对简单的。您还可以相对轻松地找出其他f-p算术系统。