【问题标题】:How are extremely large floating-point numbers represented in memory?极大的浮点数如何在内存中表示?
【发布时间】:2014-05-24 01:54:11
【问题描述】:

像 GMP 这样的任意精度库如何在内存中存储非常大的浮点数?

我可以想象,例如,如果您想计算 Pi 或欧拉常数,例如 2,000,000 位,您将为小数点右侧的数字分配大量字节数组。每个字节将存储 2 个小数位值,并且该数组将是一个数据结构的成员,其中包含用于存储该值的位数和字节数。

它是这样工作的吗?

【问题讨论】:

  • 你已经很接近了。高效的实现使用更大的基础。 GMP 在 32 位或 64 位整数数组中使用基址 2^322^64

标签: c gmp bigint largenumber


【解决方案1】:

当前计算机有 32 位或 64 位寄存器,因此对字节进行计算非常低效。此外,计算机以二进制工作,因此使用 2 的幂的基数更有效。他们将使用基数 232 或 264 就像 Mysticial 所说的那样。每个计算机字都将存储数字的一个数字,并且它们逐个数字地工作。

在某些情况下,您不需要太多计算,但大多数时候您需要输入和输出十进制字符。这种情况下使用 1 或 10 的基数更有效。您可以在 32 位计算机中使用基数 109,在 64 位计算机中使用 1019,因为这是 10 的最大幂次方可以存储在 32 位或 64 位计算机中价值

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-10-16
  • 1970-01-01
  • 1970-01-01
  • 2021-09-30
  • 1970-01-01
  • 1970-01-01
  • 2014-10-14
  • 2012-03-13
相关资源
最近更新 更多