【问题标题】:What's bigger than a double?什么比双倍大?
【发布时间】:2010-09-20 10:01:48
【问题描述】:

是否存在比双精度“更大”的原生 C++ 变量类型?
浮点数为 7
double 是 15(当然取决于编译器)
有没有更大的东西是原生的,甚至是非原生的?

【问题讨论】:

  • 我通常认为 float 为 4,double 为 8,但您指的是大约十进制位数,而我指的是使用的字节数。
  • 三倍! (呸,呸!)

标签: c++ types variables


【解决方案1】:

C++ 有long double,但不能保证它比普通的double 更精确。在 x86 平台上,double 通常是 64 位,long double 是 64 或 80 位(如果我没记错的话,这给了你 19 个有效数字)。

您的里程可能会有所不同,尤其是如果您不在 x86 上。

【讨论】:

    【解决方案2】:

    long double 通常只使用 10 个字节,但由于对齐的原因,结构中实际上可能占用 12 或 16 个(取决于编译器和选项)字节。

    10 字节长的 double 提供 64 位尾数;当您想在不损失精度的情况下以浮点存储 64 位整数时,这非常方便。

    【讨论】:

      【解决方案3】:

      您可以使用GNU MP。它的floating-point functions 具有无限的尾数和 32 位或 64 位(取决于本机字长)指数。它还带有C++ wrapper

      【讨论】:

        【解决方案4】:

        还有一些用于 C++ 的各种 bigfloat/bigint 库,它们允许任意精度的数学运算。 Microsoft Codeplex 上有 this 库,但谷歌搜索会找到很多其他库。

        【讨论】:

          【解决方案5】:

          C++ 有 long double,但仍然非常有限。不妨试试 GNU 的 gmp 库。您可以根据需要设置任意大的数字,当您使用 gmp_add 而不是普通的 + 时,它会非常有趣且非常笨拙。我确定某处有一个 C++ 包装器。

          【讨论】:

            【解决方案6】:

            long double,但一般也是 15 位精度。

            【讨论】:

              【解决方案7】:

              long long double 只有一些 cpu 允许你使用它...

              【讨论】:

                【解决方案8】:

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-04-16
                  • 2020-03-24
                  • 2011-05-15
                  • 2011-08-07
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多