【问题标题】:Order of magnitude for double precision双精度的数量级
【发布时间】:2013-03-07 18:14:09
【问题描述】:

两个理论上相等的双精度数之间的减法应该有什么数量级的差异?

我有两个双精度数组。预计它们在理论上是相同的。它们都是通过两种完全不同的方法计算的,因此它们之间存在一些数值差异。我逐个元素地检查了它们,我最大的不同是 6.5557799910909154E-008。我的老板说对于双精度来说这是一个非常大的差异,但我认为如果差异是 E-008 的数量级,那就可以了。

谢谢你, 普雷迪普

【问题讨论】:

    标签: fortran double-precision


    【解决方案1】:

    Double precision floating point 具有以下格式

    • 符号位:1 位
    • 指数宽度:11 位
    • 有效位精度:53 位(52 位显式存储)

    这给出了 15 - 17 位有效十进制数字的精度。如果将最多 15 个有效小数的十进制字符串转换为 IEEE 754 双精度,然后再转换回相同的有效小数位数,则最终字符串应与原始字符串匹配;如果 IEEE 754 双精度被转换为具有至少 17 位有效小数的十进制字符串,然后再转换回双精度,则最终数字必须与原始数字匹配。

    Single precision floating point 具有以下格式

    • 符号位:1 位
    • 指数宽度:8 位
    • 有效精度:24(23 显式存储)

    这给出了 6 到 9 位有效小数位的精度(如果将最多 6 位有效小数的十进制字符串转换为 IEEE 754 单精度,然后再转换回相同的有效小数位数,则最终字符串应与原始;并且如果将 IEEE 754 单精度转换为具有至少 9 位有效小数的十进制字符串,然后再转换回单精度,则最终数字必须与原始数字匹配。

    您遇到的最大差异表示类似于转换为单精度的精度损失。

    你知道这两种方法中哪一种更准确吗?主要区别是计算速度和精度之间的权衡,还是其中一种算法在数值上不太稳定?输入的精度是多少?如果您的输入不是那么精确,则 8 位小数的精度差异可能无关紧要……或者这可能意味着在行星轨道上丢失了火星。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-17
      • 1970-01-01
      • 2017-06-21
      • 2018-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多