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.


Need Your Help

UnZip Dissambler Pipeline

biztalk biztalk-2010

I have a requirement where I am receiving a Zip file at a receive location.

C# Linq All Condition

c# linq

I have a list of codes as follows

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.