1

我尝试阅读有关浮点实现的 IEEE 标准,但它对我来说非常先进,而且我不是以编程为生。

这是我想知道的。

假设我有一个介于 0 和 N 之间的浮点变量,我会在需要时将其放大,但中间计算将在这个非标准化值中完成。

从逻辑上讲,范围[0.0, 1.0]就足够了。但是如果我将我的数字限制在 0 和 1 之间,我会以某种方式失去精度吗?如果我使用[0, 10.0],会得到什么[0, 1000000.0]吗?

谢谢你。

4

1 回答 1

2

您的想法是一个好主意,但您不会保存任何东西,因为从某种意义上说,浮点数旨在为您执行此操作。

在内部,浮点数有两部分,称为尾数和指数。尾数等于您的范围,指数是使其达到“真实”值所需的缩放比例。

您给出的任何数字都被归一化为 [1-9.999...] 之类的范围加上 10 乘数的幂。因此您可以获得几乎所有值的尾数精度(唯一的例外是当您达到指数的极端时 - 这些被称为“非规范化数字”(或“次规范”),但非常小(接近于零)或大,通常不需要担心)。

因此,无论您输入 1.23 还是 12.3 或 123,它都会在内部存储为 1.23(尾数)加上一个因子(1、10 或 100,指数)。

实际上,这并不完全正确,因为它使用 2 的幂(二进制)而不是 10 的幂(十进制)(参见来自 Sixlettervariable 的评论),但这是相同的一般概念。

于 2012-06-06T02:02:17.727 回答