【问题标题】:base-2: why DECIMAL_DIG - DIG == 2 or 3?base-2:为什么 DECIMAL_DIG - DIG == 2 或 3?
【发布时间】:2021-10-05 11:36:48
【问题描述】:

base-2:为什么 DECIMAL_DIG - DIG == 2 或 3?

例子:

  • FLT_DECIMAL_DIG - FLT_DIG == 9 - 6 == 3
  • DBL_DECIMAL_DIG - DBL_DIG == 17 - 15 == 2
  • LDBL_DECIMAL_DIG - LDBL_DIG == 21 - 18 == 3
  • FLT16_DECIMAL_DIG - FLT16_DIG == 5 - 3 == 2

额外:是否保证在任何使用 base-2 的给定实现中,这种差异将是 2 或 3?

【问题讨论】:

标签: c floating-point c11


【解决方案1】:

是的,对于基数为 2 的基数,xxx_DECIMAL_DIG - xxx_DIG 将是 2 或 3。

非正式证明

对于浮点类型:

  • b 是基数或基数或指数表示(整数 > 1)
  • p 是精度(有效数字中的 base-b 位数)(我假设这是 > 1 和有理数)

xxx_DECIMAL_DIG 值定义为:

p log10b — 如果 b 是 10 的幂
⎱ ⌈1 + p log10b⌉ — 否则

xxx_DIG 值定义为:

p log10b — 如果 b 是 10 的幂
⎱ ⌊(p - 1) log10b⌋ — 否则

对于 b = 2,log10b ≈ 0.301 并且是无理数 (proof)。
p log10 2 是无理数(因为 p 是有理数且 > 1)。
∴ ⌈p log10 2⌉ - ⌊p log10 2⌋ = 1.
∴ ⌈1 + p log10 2⌉ - ⌊p log10 2⌋ = 2. — ① ⌊p log10 2⌋ - ⌊(p - 1) log10 2⌋ ∈ {0, 1 }。 — ② (因为 0 10 2 ∴ ⌈1 + p log10 2⌉ - ⌊(p - 1) log10 2⌋ ∈ { 2, 3}。 —(从①和②) ∎

【讨论】:

    【解决方案2】:

    给定xxx_DECIMAL_DIGxxx_DIG 的定义,我们有
    2 <= ceil(1+p*log10(2)) - floor((p-1)*log10(2)) <= 3
    简化:

    2 <=     ceil(1+p*log10(2)) - floor((p-1)*log10(2)) <= 3
    2 <= 1 + ceil(  p*log10(2)) - floor((p-1)*log10(2)) <= 3
    let q = p – 1
    2 <= 1 + ceil(  (1 + q)   *log10(2)) - floor((p-1)*log10(2)) <= 3
    2 <= 1 + ceil(log10(2) + q*log10(2)) - floor(  q  *log10(2)) <= 3
    let R = trunc(q*log10(2))
    let r = trunc(q*log10(2)) – R, r is [0.0 …1.0)
    log10(2) = 0.301…
    2 <= (1 + R + ceil(0.301… + r)) – (R + floor(r)) <= 3
    2 <=  1     + ceil(0.301… + r)       – floor(r)  <= 3
    2 <=  1     + ceil(0.301… + r)       – 0         <= 3
    When r <= 1.0 - 0.301…
      2 <= 1 + 1 <= 3
    Otherwise r > 1.0 - 0.301…
      2 <= 1 + 2 <= 3
    

    即使显示差异是 2 或 3,我想接下来的问题是为什么是
    xxx_DECIMAL_DIG: ceil(1+p*log10(2))

    xxx_DIG: floor((p-1)*log10(2))?

    【讨论】:

      猜你喜欢
      • 2012-02-04
      • 2020-01-23
      • 2010-10-02
      • 2011-05-27
      • 1970-01-01
      • 2018-01-31
      • 2016-05-02
      • 1970-01-01
      • 2021-12-03
      相关资源
      最近更新 更多