C#高精度计算

时间:2011-11-13 18:23:02

标签: c# .net sqrt

考虑以下代码:

double result = Math.Sqrt(4746073226998689451);

结果我得到2178548422而不是2178548421.999999854etc ...我怎样才能得到更精确的结果?

4 个答案:

答案 0 :(得分:7)

对于特定问题,计算平方根,可以使用Decimal类型和Newton算法:

using System;

class Program
{
  public static void Main()
  {
    long x = 4746073226998689451;
    decimal sqrt_x = (decimal)Math.Sqrt(x);
    for (int i = 0; i < 10; ++i)
      sqrt_x = 0.5m * (sqrt_x + x / sqrt_x);
    Console.WriteLine("{0:F16}", sqrt_x);
  }
}

结果是:

2178548421.9999998547197773

答案 1 :(得分:6)

维基百科上提到了一堆用于.NET的高精度数学库 - Arbitrary-percision artithmatic页面。

我之前看过BigNum推荐,虽然维基百科的链接已经破了,目前我在其他地方找不到这个库。

页面上的其他选项是C# binding for MPIR

答案 2 :(得分:1)

使用digit by digit calculation会为您提供所需数量的数字。

答案 3 :(得分:1)

而不是double,尝试大整数并查看此链接

Big numbers with fraction support

相关问题