C#高精度计算

考虑以下代码:

double result = Math.Sqrt(4746073226998689451); 

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

对于特定问题,计算平方根,可以使用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 

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

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

页面上的另一个选项是MPIR的C#绑定 。

使用逐位数字计算将为您提供所需数量的数字。

而不是双倍,尝试大整数,也看看这个链接

支持分数的大数字