【问题标题】:Implement doubles using floats?使用浮点数实现双打?
【发布时间】:2010-11-28 00:44:58
【问题描述】:

假设我在一个唯一浮点类型(比如)32 位宽的环境中,我想用 64 位浮点数进行一些计算。

是否有任何合理/有效/可行的方法来使用 float32 数据类型来实现更广泛的浮点数据类型,如 float64? (甚至是 float63、float48 或任何比我的 32 更宽的东西?)

或者我最好只使用整数实现更长的浮点数据类型?

我猜位位置的具体含义会使这基本上不可能,但我不是数字专家,也不知道如何搜索,所以也许有一个聪明的方法。

【问题讨论】:

    标签: floating-point double


    【解决方案1】:

    您可以使用一些技巧来获得比您的机器想要提供的更高的精度。其中最著名的是 Kahan 求和算法,用于在计算一组浮点数的总和时获得额外的精度:

    http://en.wikipedia.org/wiki/Kahan_summation_algorithm

    设计这样的过程需要对浮点计算的内部工作有相当详细的了解,因此请谨慎行事。

    【讨论】:

      【解决方案2】:

      我认为你的猜测是正确的。可以尝试将 64 位浮点数表示为两个 32 位浮点数的乘积,但我认为您不能同时让指数和尾数同时工作。 可能有可能得到像 float48 这样的净效果,但总体上看起来相当狡猾。

      但是应该有一些库可以用 int 来做这件事。不久前,常用的 CPU 还没有硬件浮点支持。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-29
        • 2021-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-20
        • 1970-01-01
        相关资源
        最近更新 更多