【发布时间】:2015-10-28 12:06:58
【问题描述】:
考虑以下:
double x = 87974894654657d;
double y = 76216354532345d;
double a = x * y;
Console.WriteLine(a.ToString("n0"));
BigInteger x1 = new BigInteger(87974894654657);
BigInteger y1 = new BigInteger(76216354532345);
BigInteger a1 = x1 * y1;
Console.WriteLine(a1.ToString("n0"));
输出:
6.705.125.760.945.040.000.000.000.000
6.705.125.760.945.040.955.511.380.665
有没有办法让double 正确计算结果? BigIntegers 工作正常,但比浮点类型慢得多。我使用的是 double 而不是 long,因为我正在处理非常大的数字。
【问题讨论】:
-
只有 2^53 以内的整数才能准确地存储在双精度数中。
-
双精度为
16位。因此,随着数字变大,您将失去数字。 有没有办法让 double 正确计算结果? 没有。没有办法使用 single double,因为它是 64 位,你不能存储比这更多的数据。BigIntegers work fine, but are much slower你想要精确。你必须付钱。
标签: c# double precision biginteger