c - 如何在内存中表示极大的 float ?

标签 c gmp bigint largenumber

像 GMP 这样的任意精度库如何存储在内存中表示的超大 float ?

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

这是它的工作原理吗?

最佳答案

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

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

关于c - 如何在内存中表示极大的 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23840565/

相关文章:

c++ - 使用 mpz 时在 tcache 2 中检测到双重释放是什么意思?

go - 将 big.Int 转换为 [2]int64,反之亦然以及二进制补码

c - 我不断收到一个未知错误,说预期的表达式 :

c - 动态分配 'sizeof(char)' 冗余时是否使用 'char'?

c - 在 Mac OS 10.8 上使用 dev/urandom 生成非常慢的随机数

php - 在 lampp 套件中编译 gmp php 扩展时缺少 config.m4 文件

javascript - 将 36 进制转为 BigInt?

Java比较整数和bigInteger

c - 动态数据结构、保留

C 程序将一棵二叉搜索树复制到另一棵