【问题标题】:Mathematical representation of double in javajava中double的数学表示
【发布时间】:2018-08-03 21:49:30
【问题描述】:

我想指定一个完全覆盖双/浮点数范围的集合。

对于Integer 这很容易,因为它们都是从Integer.MIN_VALUEInteger.MAX_VALUE 的自然数所以

整数 = { x e ℕ | x ≤ 2147483647x ≥ -2147483648 }

对于 doublefloat,由于这些数据类型的精度,它更难

编辑:

要求“数学表示”可能有点不精确。那我需要什么:

我正在寻找适合这种模式的定义:

双 = { x e ℝ | x ≤ 2-1022x ≥ -2-1074{在此处插入更多条件} }

【问题讨论】:

标签: java math floating-point


【解决方案1】:

嗯,极值是Double.MIN_VALUEDouble.MAX_VALUE。由于计算机是谨慎的实体并且实数是连续的,因此在此范围内存在“漏洞”。

血淋淋的细节在IEEE 754

【讨论】:

    【解决方案2】:

    只是为了给你一个想法,忽略常数和一些特殊情况(规范化,隐藏一个,逐渐下溢,...... - 你可以计算出细节),可表示的数字基本上是

    M * 2^E where MMIN <= M <= MMAX and EMIN <= E <= EMAX
    

    顺便说一句,这甚至是有理数的一个子集。用这种格式表示无理数是不可能的。

    另一方面,还有几个值,根本不是数字。

    【讨论】:

      【解决方案3】:

      没有无穷大和像 NaN 这样的特殊值,实际值实际上是有理数

      • Double_normal = { x ∈ ℚ | x = (-1)符号 × 1.mantissa × 2exp - 偏差, 1 ≤ exp ≤ 2046 }
      • Double_subnormal = { x ∈ ℚ | x = (-1)符号 × 0.mantissa × 2-1022 }
      • Double = Double_normalDouble_subnormal ⋃ { 0 }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-07
        • 2018-11-12
        • 2015-02-23
        • 1970-01-01
        • 1970-01-01
        • 2015-12-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多