当我使用浮点数时,如果限制范围,是否会失去精度?

时间:2012-06-06 01:53:26

标签: c floating-point

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

这是我想知道的。

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

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

,我会获得任何收益吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

你的想法很好,但你不保存任何东西,因为从某种意义上说,浮点数就是为你做的。

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

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

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

实际上,这并不完全正确,因为它使用2(二进制)的幂而不是10(十进制)的幂(参见sixletter变量的注释),但它是相同的一般想法。