考虑这段代码:
double result = Math.Sqrt(4746073226998689451);
对于结果,我得到 2178548422 而不是 2178548421.999999854etc ......我怎样才能得到更精确的结果?
维基百科上提到了一堆用于 .NET 的高精度数学库 -任意精度算法页面。
我以前在这里看到过推荐的 BigNum,尽管 wikipedia 链接已损坏,我目前无法在其他地方找到该库。
页面上的另一个选项是MPIR 的 C# 绑定。
对于特定问题,计算平方根,您可以使用 Decimal 类型和牛顿算法:
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
使用逐位计算将为您提供所需的位数。
而不是 double ,尝试大整数并查看此链接