代码之家  ›  专栏  ›  技术社区  ›  Denis

双精度C++,308位数字或15位数字?

  •  0
  • Denis  · 技术社区  · 3 年前

    如果double可以表示高达3.4E308(308个零)的值,那么为什么我们说double只存储15个数字?说“308的十次方”有什么意义?

    1 回复  |  直到 3 年前
        1
  •  6
  •   Fureeish    3 年前

    我们 不要 说吧“ double 只存储15位数字 “我们这么说” 双重的 有15位精度 “。这意味着 双重的 当以10位为基数的数字序列打印时,其精度仅为15位。

    双重的 可以 代表 3.4E308 .是的,要打印它需要超过15位的精度。由于浮点实现,某些特定值具有这些保证。 但是 ,例如,一个数字 3.4E308 - 1 哪一个 里面 双重的 的射程, 不能 代表 准确地 通过 双重的 .

    如果你想确定,只需取 双重的 .有些值可以用超过15位的数字正确表示,但有些不能。每一个价值 双重的 的射程 正确表示为其十进制表示的第15位。

        2
  •  0
  •   eerorika    3 年前

    为了帮助简单地理解这一点,考虑一个可以表示以下数字的数字类型:

    -100000
    -100
    -9
    -8
    -7
    -6
    -5
    -4
    -3
    -2
    -1
    0
    +1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +100
    +100000
    

    该类型最多可以表示100000个数字。这种类型的精度是6位还是1位?