C# BigInteger不能表示无穷大

C# BigInteger不能表示无穷大,c#,algorithm,biginteger,C#,Algorithm,Biginteger,当我运行这段代码时,我得到运行时异常 OverflowException:BigInteger不能表示无穷大 BigInteger和=0; 对于(double i=1;i发生这种情况是因为您超出了double的限制 Math.Pow在doubles中进行求值,因此有限结果只能是大约一个大于i=144的数字。因此它会导致double.PositiveInfinity,不能转换为bigingerbiginger对无限值没有特殊表示ydouble可以,它只能存储整数,而无穷大不是整数-即使BigInt

当我运行这段代码时,我得到运行时异常

OverflowException:BigInteger不能表示无穷大

BigInteger和=0;

对于(double i=1;i发生这种情况是因为您超出了
double
的限制

Math.Pow
double
s中进行求值,因此有限结果只能是大约一个大于
i=144
的数字。因此它会导致
double.PositiveInfinity
,不能转换为
biginger
biginger
对无限值没有特殊表示y
double
可以,它只能存储整数,而无穷大不是整数-即使
BigInteger
没有限制,它也永远不会达到无穷大。实际上,当用于存储数字的内部数组达到其最大大小时,
BigInteger
也有限制(您可能会很快耗尽内存)

例如,在这种情况下,您可以使用
biginger.Pow
来避免这种情况

BigInteger sum = 0;
for (int i = 1; i <= 1000; i++)
    sum += BigInteger.Pow(i, i);
BigInteger和=0;

对于(int i=1;i最有可能的是,您超过了BigInteger允许的最大值,不管是什么。@KevinH System.NumericsI运行了您的代码,它运行得很好,我在
.net framework 4.0
@EZI下运行,那么为什么它不保存1000的值呢^1000@LCTS预测宇宙中有
10**80
氢原子
1000**1000
可以是一个大数字:)@EZI这是为什么要投否决票?@Harold你期望更多吗?@EZI你到底在说什么?@Harold即使你使用
biginger
你也无法计算
1000**1000
@EZI这只是一个数量级的数字1000**1000,大约只有10k位
BigInteger sum = 0;
for (int i = 1; i <= 1000; i++)
    sum += BigInteger.Pow(i, i);