【发布时间】:2013-09-10 14:03:40
【问题描述】:
如果我正确理解 IEEE 浮点数,它们将无法准确表示某些值。它们在非常有限的情况下是准确的,并且几乎每个浮点运算都会增加累积的近似值。此外,另一个缺点 - “最小步长”随指数增长。
提供一些更具体的表示不是更好吗?
例如,“小数”部分使用 20 位,但不是所有 2^20 值,而是仅 1000000,给出完整的百万分之一最小可能表示/分辨率,并将其他 44 位用于整数部分,给出了相当的范围。通过这种方式,可以使用整数算术计算“浮点”数,甚至可以更快地结束。而且在乘法、加法和减法的情况下,没有近似值的累积,唯一可能的损失是在除法期间。
这个概念基于这样一个事实,即 2^n 值不是表示十进制数的最佳值,例如1 不能很好地划分为 1024 个部分,但它可以很好地划分为 1000 个部分。从技术上讲,这忽略了利用完整的精度,但我可以想到很多 LESS 可以是 MORE 的情况。
当然,这种方法会在某种程度上失去范围和精度,但在所有不需要末端的情况下,这样的表示听起来是个好主意。
【问题讨论】:
-
所以不是问这个问题的地方!
-
您的系统无法准确表示某些值,并且在非常有限的情况下是准确的。此外,乘法也会降低准确性。
-
IEEE 是一个标准化机构,你的意思是 IEEE 754 标准。并且已经有一个十进制浮点标准:en.wikipedia.org/wiki/Decimal_floating_point
-
这个问题表示定点乘法没有错误。这是不正确的。分辨率为 1/106 的数字相乘会产生分辨率为 1/1012 的结果。结果必须四舍五入以适应固定的 1/10**6 格式。
标签: c++ floating-point implementation floating-accuracy approximation