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