繁体   English   中英

具有字符数组实现的BigInteger的上限是多少?

[英]What is the upper bound of BigInteger with character array implementation?

如果我使用字符数组(在C ++中)强制BigInteger ,就10的幂而言,在32位系统中我的上限是多少?

换一种说法,

- 10^x < N <= 10^x

(第一个字符是为标志保留的)。

什么是32位系统中的x

请暂时忽略我们已为操作系统保留内存,并认为我们可以寻址所有4GB内存。

一个8位字节可以容纳2 8或256个唯一值。

4GB内存是2 32或4294967296 字节

或者4294967295,如果我们减去要为符号保留的一个字节

这是34359738360

这么多位可以容纳2个34359738360唯一值。

- 10^x < N <= 10^x

(第一个字符是为标志保留的)。

什么是32位系统中的x?

Wolfram Alpha建议 - 10^1292913986 < N <= 10^1292913986作为- 10^1292913986 < N <= 10^1292913986的最大可表示权力。

所以x是1,292,913,986。

(−(2^(n−1))) to (2^(n−1) − 1)计算有符号整数的范围,其中n是位数。 [1]

假设您指的是分配的整个4GB内存,即32位内存空间中的2 32 (4,294,967,295)个可寻址字节,即2 35 (34,359,738,368)位。

把它放在开头的公式中,你得到一个范围 - (2 2 35 -1 )到2 2 35 -1 -1

假设您使用一个符号作为符号,而不是整个字节。 如果您使用整个字节作为符号,则应计算2 35 -8位的无符号范围。 从0到2 2 35 -8 -1

根据页面,要从基数2的指数转换为基数10的指数,您应该使用公式x = m * ln(2)/ ln(10),其中您将从2 m转换为10 x

因此,你的答案是上界是10 2 35 -8 * ln(2)/ ln(10) 我甚至不打算尝试将该指数更改为十进制值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM