Beim Analysieren einer BigInteger
in Exponentialform begrenzt der .NET-FX-Code den Exponenten auf 1000. Wenn ein größerer Exponent gefunden wird, wird statt dessen ein Exponent von 9999
(!!) verwendet. Siehe FormatProvider.Number.cs, from line 495. Sie können selbst sehen:
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
Auch wenn dies nicht eine Grenze von BigInteger
selbst, nur eine Grenze des Parsers :
Console.WriteLine((BigInteger.Parse("1e+1000", NumberStyles.AllowExponent) * 10).ToString("E", CultureInfo.InvariantCulture));
1.000000E + 1001
ich so ein überraschendes und inkohärent Verhalten eines offensichtlicher Fehler nennen würde, aber das Verhalten von einem explizit hinzugefügt Stück Code verursacht wird, und ich bin nicht in der Lage, eine genaue Angabe über BigInteger
Grenzen zu finden, abgesehen von “arbitrarily large” and “whose value in theory has no upper or lower bounds”.
Was ist der dokumentierte Bereich von dotnet BigInteger? – LutzL
Unbegrenzt! Vielleicht, Größe des RAM. – TimeCoder