C++ IEEE浮点实现、精度和近似累积

C++ IEEE浮点实现、精度和近似累积,c++,floating-point,implementation,floating-accuracy,approximation,C++,Floating Point,Implementation,Floating Accuracy,Approximation,如果我正确理解IEEE浮点,它们就无法准确地表示某些值。它们在非常有限的情况下是精确的,几乎每个浮点运算都会增加累积近似值。另外,另一个缺点是“最小步长”随指数增长 提供一些更具体的表述不是更好吗 例如,使用20位表示“十进制”部分,但不是所有2^20值,而仅使用1000000,给出完整的1/million最小可能表示/分辨率,使用其他44位表示整数部分,给出相当大的范围。通过这种方式,可以使用整数运算来计算“浮点”数,甚至可能更快。在乘法、加法和减法的情况下,没有近似值的累积,唯一可能的损失是

如果我正确理解IEEE浮点,它们就无法准确地表示某些值。它们在非常有限的情况下是精确的,几乎每个浮点运算都会增加累积近似值。另外,另一个缺点是“最小步长”随指数增长

提供一些更具体的表述不是更好吗

例如,使用20位表示“十进制”部分,但不是所有2^20值,而仅使用1000000,给出完整的1/million最小可能表示/分辨率,使用其他44位表示整数部分,给出相当大的范围。通过这种方式,可以使用整数运算来计算“浮点”数,甚至可能更快。在乘法、加法和减法的情况下,没有近似值的累积,唯一可能的损失是在除法过程中

这个概念基于这样一个事实,即2^n值不是表示十进制数的最佳值,例如,1不能很好地将其划分为1024个部分,但它可以很好地划分为1000个部分。从技术上讲,这忽略了使用全精度,但我可以想到很多情况下,越少越好


当然,这种方法在某种程度上会失去范围和精度,但在所有不需要肢体的情况下,这样的表示听起来是个好主意。

你所描述的命题是一种定点算法。现在,不一定是好还是坏;每种表示法都有各自的优缺点,这往往使一种表示法比另一种表示法更适合于某些特定目的。例如:

  • 定点算法不会给加法和减法之类的运算引入胭脂误差,这使得它适合于金融计算。您当然不希望将货币存储为浮点值

  • 推测:可以说,定点算法在实现上更简单,这可能导致更小、更高效的电路

  • 浮点表示法涵盖了非常大的范围:它可以用来存储非常大的数字(~1040表示32位浮点,10308表示64位浮点)和非常小的正数(~10-320),但以精度为代价,而定点表示法则受到其大小的线性限制

  • 浮点精度在可表示范围内分布不均匀。相反,大多数值(就可表示数字的数量而言)位于0附近的单位球中。这使得它在我们最常使用的范围内非常精确

你自己说的:

从技术上讲,这忽略了使用全精度,但我 我能想到很多情况,越少越好


没错,这就是重点。现在,根据手头的问题,必须做出选择。没有一刀切的表示法,它总是一种折衷。

你所描述的命题是一个定点算术。现在,不一定是好还是坏;每种表示法都有各自的优缺点,这往往使一种表示法比另一种表示法更适合于某些特定目的。例如:

  • 定点算法不会给加法和减法之类的运算引入胭脂误差,这使得它适合于金融计算。您当然不希望将货币存储为浮点值

  • 推测:可以说,定点算法在实现上更简单,这可能导致更小、更高效的电路

  • 浮点表示法涵盖了非常大的范围:它可以用来存储非常大的数字(~1040表示32位浮点,10308表示64位浮点)和非常小的正数(~10-320),但以精度为代价,而定点表示法则受到其大小的线性限制

  • 浮点精度在可表示范围内分布不均匀。相反,大多数值(就可表示数字的数量而言)位于0附近的单位球中。这使得它在我们最常使用的范围内非常精确

你自己说的:

从技术上讲,这忽略了使用全精度,但我 我能想到很多情况,越少越好


没错,这就是重点。现在,根据手头的问题,必须做出选择。没有一刀切的表示法,这总是一种折衷。

因此,不是提出这个问题的地方!您的系统无法准确表示某些值,并且在非常有限的情况下是准确的。此外,乘法也会降低精度。IEEE是一个标准化机构,你指的是IEEE 754标准。十进制浮点已经有了一个标准:这个问题的可能重复表明定点乘法没有错误。这是不正确的。将数字与分辨率1/106相乘将生成分辨率为1/1012的结果。结果必须四舍五入,以适合固定的1/10**6格式。因此,不是提出此问题的地方!您的系统无法准确表示某些值,并且在非常有限的情况下是准确的。此外,乘法也会降低精度。IEEE是一个标准化机构,你指的是IEEE 754标准。十进制浮点已经有了一个标准:这个问题的可能重复表明定点乘法没有错误。这是不正确的。将数字与分辨率1/106相乘将生成分辨率为1/1012的结果。结果必须四舍五入以适应固定的1/10**6格式。考虑到我所见过的每种编程语言只提供IEEE实数,我认为IEEE浮点表示应该是“一刀切”的。当然,场景