# C# high precision calculations

Consider this code:

double result = Math.Sqrt(4746073226998689451);

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

## Answers

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

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.