.net BigInteger.Parse工作不正确

.net BigInteger.Parse工作不正确,.net,math,biginteger,.net,Math,Biginteger,这对我来说很奇怪,但您可以自己尝试以下简短代码: var num1 = BigInteger.Parse("1e+9999", NumberStyles.AllowExponent); var num2 = BigInteger.Parse("1e+9998", NumberStyles.AllowExponent); var div = num1 / num2; // is 1, but must be 10 var eq = num1 == num2; // true, but must b

这对我来说很奇怪,但您可以自己尝试以下简短代码:

var num1 = BigInteger.Parse("1e+9999", NumberStyles.AllowExponent);
var num2 = BigInteger.Parse("1e+9998", NumberStyles.AllowExponent);
var div = num1 / num2; // is 1, but must be 10
var eq = num1 == num2; // true, but must be false

建议?

以指数形式解析
biginger
时,.NET FX代码将指数限制为1000。如果发现大于该值的指数,则替换为指数
9999
(!!)。看见你可以自己看看:

Console.WriteLine(BigInteger.Parse("1e+1000", NumberStyles.AllowExponent).ToString("E", CultureInfo.InvariantCulture));
Console.WriteLine(BigInteger.Parse("1e+1001", NumberStyles.AllowExponent).ToString("E", CultureInfo.InvariantCulture));
一百万欧元+1000欧元

100000E+9999

即使这不是
BigInteger
本身的限制,也只是解析器的限制:

Console.WriteLine((BigInteger.Parse("1e+1000", NumberStyles.AllowExponent) * 10).ToString("E", CultureInfo.InvariantCulture));
100000E+1001


我会将这种令人惊讶且不连贯的行为称为明显的错误,但这种行为是由显式添加的一段代码引起的,除此之外,我无法找到关于
biginger
限制的确切规范。

dotnet biginger的文档范围是什么?无限!也许是公羊的大小。谢谢!你能提出一些解决办法吗?如何初始化值为10^100000的BigInteger?@TimeCoder您还可以计算出
10^100000
的十六进制值,并将适当的值传递给构造函数。@ScottChamberlain这就像一个悖论,“计算出
10^100000
的值。”没有BigInteger类。换句话说,我可以翻译2的多项式中的10^N(N~数十万)并填充byte[]数组。看起来不错。我想说最简单的方法是
biginger.Pow(新的biginger(10),100000)