在我的计算机体系结构的CS作业中,我遇到了这个有趣的问题。我的教授希望我们找到单精度和双精度数,这样当你向其中任何一个加1时,数字根本不会改变。为什么这有意义,我怎样才能找到这些数字?
谢谢!
答案 0 :(得分:1)
请记住,浮点数的精度有限(他们可以跟踪的有效位数)。对于大约7位数的单精度浮点数,对于大约16位数的双精度浮点数。
另请注意,浮动数字的范围可能会超过3 x 10 ^ 38 - 所以很明显并非所有数字都是显着的。
答案 1 :(得分:0)
浮点数学基于二进制(基数2)数字系统。这里的许多答案都将提到十进制(基数10)上下文的精度和值。这导致(例如)不同浮点格式的最小值和最大值呈现奇怪的值。
单精度尾数中的24(1隐含+ 23显式)位转换为24个二进制数字的精度。设置最高位的最低24位数是2 ^ 23,转换为800000十六进制或8388608十进制(七位有效十进制数字)。设置最高位的最高位数是2 ^ 24-1,转换为ffffff十六进制或16777215(八位有效十进制数字)。所以现在你知道提到的“7-8位精度”来自何处。我个人认为二进制解释清楚地解释了事情,而十进制解释通常会产生更多问题。
如果你浏览这个论坛,你会发现一些帖子显示,对于某些值,“7-8位精度”语句不正确。如果您的背景知识完全基于小数,那么您会想知道是什么打击了你。
如果指数为零(偏移消除),则隐含位(set)和显式位清除该值将为1.00000000000000000000000 * 2 ^ 0或1.0十进制。如果指数为1,则值为1.00000000000000000000000 * 2 ^ 1或2.0十进制。
设置尾数中的最低位意味着将等于2 ^(指数-23)的值添加到1.0 * 2 ^指数。 -23来自以下事实:尾数中的最低位是隐式位右侧的23个位置,其中23个幂小于隐式位,其定义为2 ^指数。
这应该可以让你了解如何解决原始问题。