gok*_*oon 7 c c++ assembly gmp bignum
2 ^ 64离我的ram /硬盘可以处理的"无限"还有一段距离......
首先我想知道GMP如何与内存/处理器一起工作,因为它做了一些阴暗的优化......
我还想知道是否有一种方法可以在任意数量的字节上存储一个整数(无符号,更容易).例如,在50个字节上,我的上限为2 ^ 400 -1.要做的是使用携带以保持数字从一个字节到另一个字节保持一致,我对此有一些了解,但我真的不确定它是最快的方法.我甚至不确定我是否正确.
我猜GMP使用这种方式来存储它的数据,但我只想要一些(甚至很少)解释或某些理论转发(我没有任何博士学位,所以不要太难).
Ste*_*hen 21
GMP动态分配空间来表示数字(并在需要增长时重新分配).
这在Integer Internals的详细描述中,在GMP手册中,它描述了它如何将表示分块为"肢体"并将肢体存储在一个数组中.
术语"肢体"的描述来自GMP基础知识:命名法和类型:
肢体是指适合单个单词的多精度数字的一部分.(我们之所以选择这个词是因为人体的肢体类似于数字,只是更大,并且包含几个数字.)通常肢体包含32或64位.肢体的C数据类型是mp_limb_t.
因此,在GMP中表示数字的工作原理是将多个肢体组合在一起以表示整数的大小,用符号位存储(符号位用于存储肢数).
这对你意味着什么?好吧,通常int64用64位表示.完成.如果将一堆这些包装在一起,则可以显着增加它.将两个放在一起,2 ^ 64*2 ^ 64或2 ^ 128.添加两个肢体,你得到2 ^ 256.这是很多数字,存储在4个单词中(加上表示开销).
当然,浮点数的表示更复杂(参见此处),使用尾数(由符号和幅度组成)和指数存储表示.
| 归档时间: |
|
| 查看次数: |
3227 次 |
| 最近记录: |