[英]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.