考虑下面的代码:
double result = Math.Sqrt(4746073226998689451);我得到的结果是2178548422,而不是2178548421.999999854等等。怎样才能得到更精确的结果?
发布于 2011-11-14 02:35:50
对于计算平方根的特殊问题,您可以使用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发布于 2011-11-14 02:27:47
在维基百科- Arbitrary-percision artithmatic页面上提到了一堆用于.NET的高精度数学库。
我以前在这里看到过推荐的BigNum,尽管维基百科的链接被破坏了,目前我在其他地方找不到这个库。
页面上的另一个选项是C# binding for MPIR。
发布于 2011-11-14 02:27:14
使用digit by digit calculation可以给出你想要的位数。
https://stackoverflow.com/questions/8113651
复制相似问题