C# high precision calculations

匆匆过客 提交于 2019-12-03 21:03:33

问题


Consider this code:

double result = Math.Sqrt(4746073226998689451);

For result I get 2178548422 instead of 2178548421.999999854etc... How can I get more precise result?


回答1:


For the particular problem, computing the square root, you can use Decimal type and Newton's algorithm:

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);
  }
}

The result is:

2178548421.9999998547197773



回答2:


There is a bunch of high precision maths libraries for .NET mentioned on wikipedia - Arbitrary-percision artithmatic page.

I have seen BigNum recommended here before, though the wikipedia link is broken and I can't find the library elsewhere at the moment.

The other option on the page is the C# binding for MPIR.




回答3:


Using digit by digit calculation will give you as many digits as you are looking for.




回答4:


instead of double , try big integer and also check out this link

Big numbers with fraction support



来源:https://stackoverflow.com/questions/8113651/c-sharp-high-precision-calculations

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!