.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)
。