我想了解浮点数的工作原理。
我希望通过以下方式测试我的知识/需要学习的内容:我想找到最小的x
,使得x + 1 = x
,其中x
是一个浮点数。
据我所知,当x
足够大时,x+1
会更接近于x而不是下一个可由浮点表示的比x更高的数字。因此,直觉上似乎情况是我在有效数字中没有足够的位数。那么这个x的值是否是所有有效数字都是1的数字?但是我似乎无法确定指数应该是多少。显然,它必须很大(相对于10的0次幂)。
我想了解浮点数的工作原理。
我希望通过以下方式测试我的知识/需要学习的内容:我想找到最小的x
,使得x + 1 = x
,其中x
是一个浮点数。
据我所知,当x
足够大时,x+1
会更接近于x而不是下一个可由浮点表示的比x更高的数字。因此,直觉上似乎情况是我在有效数字中没有足够的位数。那么这个x的值是否是所有有效数字都是1的数字?但是我似乎无法确定指数应该是多少。显然,它必须很大(相对于10的0次幂)。
从1.0开始,不断加倍直到测试成功:
double x;
for (x = 1.0; x + 1 != x; x *= 2) { }
printf("%g + 1 = %g\n", x, x + 1);
我建议在尝试理解浮点数和浮点算术时,使用十进制,其中有效数字为5位,指数为2位。(或者,如果5和2不适合您,可以选择6和3或其他您喜欢的小数字。)以下问题:
在十进制中,所有这些问题都更容易理解,所学到的教训是完全通用的。一旦您掌握了这个知识点,通过IEEE浮点算术来增强您的知识将相对容易。您还将能够相对轻松地理解其他浮点算术系统。