Быстрый расчет большого числа с плавающей запятой, как 0,4 ^ 100000000, есть идеи?
Эмм... У меня проблема. У меня есть определенное вычисление, результатом которого является более 10^-308 (самое большое значение в двойном.net), так или иначе, я решил эту проблему через библиотеку BIGFLOAT http://www.fractal-landscapes.co.uk/bigint.html,
Что бы мне ни понадобилось, чтобы вычислить что-то вроде 0,4 ^(1000 или 100000000), проблема занимает очень очень много времени. Я еще не изучал параллельное или распределенное программирование, но мне нужно быстрое и понятное для меня решение. доставить этот проект в ближайшие 6 часов!:D
Вот код:
private BigFloat getBlocking(double k)
{
double p1, p2;
BigFloat p3;
p3 = new BigFloat(pp);
p1 = this.P / (double)(k / (double)this.N);
p2 = Math.Pow((1 - p1), 2);
p3= new BigFloat(1-p2,pp);
p3.Pow((int)k);
return p3;
}
где К равно 1000, N равно 1001
2 ответа
Загрузите и опишите библиотеку Microsoft J# .NET из своего проекта C#, чтобы вы могли использовать реализацию Big #ecimal J #.
Увидеть:
Произвольная точность десятичных дробей в C#
Большой десятичный
Установите среду выполнения J # (это бесплатно): http://www.microsoft.com/downloads/en/details.aspx?familyid=f72c74b3-ed0e-4af8-ae63-2f0e42501be1&displaylang=en
а также:
Произвольная точность десятичных знаков в C#?
а также:
http://geekswithblogs.net/gyoung/archive/2006/05/01/76869.aspx
В распространяемых файлах J # содержатся очень хорошо протестированные реализации BigInteger и BigDecimal, которые вы можете использовать непосредственно в своих приложениях.NET, просто ссылаясь на сборку J # vjslib.dll. http://download.microsoft.com/download/2/e/9/2e9bde04-3af1-4814-9f1e-733f732369a3/NETMatters0512.exe обсуждает это дополнительно. Это также включает некоторые классы Zip, которые весьма полезны.
а также:
MSDN - BigInteger, GetFiles и многое другое
Хотя вы можете выполнять поиск в Интернете, чтобы найти множество реализаций на C#, C++ и множестве других языков, это может быть необязательно. Если вы не возражаете против зависимости от библиотек J #, у вас уже есть реализация большого числа. На самом деле, у вас есть два. Библиотека времени выполнения J #, vjslib.dll, доступна как распространяемый компонент, так же как.NET Framework. Вы можете загрузить его из Visual J# Downloads (он также устанавливается в качестве обязательного компонента Visual Studio®). Таким же образом, как приложения на C# или C++ могут использовать Microsoft.VisualBasic.dll (библиотека времени выполнения Visual Basic), приложения C#, Visual Basic® и C++ могут использовать библиотеку времени выполнения J # и многочисленные интересные классы это выставляет.
Если вам не нужны все цифры, вы можете использовать логарифмы. Журнал (0.4 ^ 100000000)
является log(0.4)*100000000
, хорошо в пределах обычного диапазона с плавающей запятой.