Tim*_*der 4 .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 be false
Run Code Online (Sandbox Code Playgroud)
建议?
解析BigInteger指数形式的a时,.NET FX 代码将指数限制为 1000。如果发现比该指数更大的指数,9999则替换为(!!)的指数。请参阅第 495 行中的 FormatProvider.Number.cs。你可以亲眼看看:
Console.WriteLine(BigInteger.Parse("1e+1000", NumberStyles.AllowExponent).ToString("E", CultureInfo.InvariantCulture));
Console.WriteLine(BigInteger.Parse("1e+1001", NumberStyles.AllowExponent).ToString("E", CultureInfo.InvariantCulture));
Run Code Online (Sandbox Code Playgroud)
1.000000E+1000
1.000000E+9999
即使这不是BigInteger自身的限制,也只是解析器的限制:
Console.WriteLine((BigInteger.Parse("1e+1000", NumberStyles.AllowExponent) * 10).ToString("E", CultureInfo.InvariantCulture));
Run Code Online (Sandbox Code Playgroud)
1.000000E+1001
我将这种令人惊讶和不连贯的行为称为明显的错误,但该行为是由明确添加的一段代码引起的,BigInteger除了“任意大”和“其理论上的价值有没有上限或下限”。
| 归档时间: |
|
| 查看次数: |
126 次 |
| 最近记录: |