gpt4 book ai didi

.net - BigInteger.Parse 工作不正确

转载 作者:行者123 更新时间:2023-12-02 06:55:39 24 4
gpt4 key购买 nike

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

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

建议?

最佳答案

以指数形式解析 BigInteger 时,.NET FX 代码将指数限制为 1000。如果发现比该值更大的指数,则指数为 9999 ( !!) 被替换。请参阅FormatProvider.Number.cs, from line 495 。您可以亲自看看:

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

1.000000E+1000

1.000000E+9999

尽管这不是 BigInteger 本身的限制,而只是解析器的限制:

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

1.000000E+1001

我将这种令人惊讶且不连贯的行为称为明显的错误,但该行为是由显式添加的代码段引起的,除了 BigInteger 限制之外,我无法找到有关 BigInteger 限制的确切规范“arbitrarily large” and “whose value in theory has no upper or lower bounds” .

关于.net - BigInteger.Parse 工作不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37194981/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com