Рассмотрим этот код:
double result = Math.Sqrt(4746073226998689451);
В результате я получаю 2178548422 вместо 2178548421.999999854 и т. Д. Как мне получить более точный результат?
Рассмотрим этот код:
double result = Math.Sqrt(4746073226998689451);
В результате я получаю 2178548422 вместо 2178548421.999999854 и т. Д. Как мне получить более точный результат?
Для конкретной задачи, вычисления квадратного корня, вы можете использовать тип 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
В википедии упоминается множество высокоточных математических библиотек для .NET - Художественный рисунок с произвольной точностью страница.
Я видел, что BigNum рекомендован здесь раньше, хотя ссылка на Википедию не работает, и я не могу найти библиотеку в другом месте в данный момент.
Другой вариант на странице - это привязка C # для MPIR.
Использование расчета по цифрам даст вам столько цифр, сколько вы ищете. за.
вместо двойного, попробуйте большое целое число, а также посмотрите эту ссылку
Большие числа с поддержкой дробей