Быстрый расчет большого числа с плавающей запятой, как 0,4 ^ 100000000, есть идеи? - PullRequest
2 голосов
/ 21 апреля 2011

Эмм ... У меня проблема. У меня есть определенное вычисление, результатом которого является более 10 ^ -308 (самое большое значение в double .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;

    }

, где K равно 1000, N равно 1001

Ответы [ 2 ]

6 голосов
/ 21 апреля 2011

Если вам не нужны все цифры, вы можете использовать логарифмы. Лог (0.4 ^ 100000000) равен log(0.4)*100000000, что находится в пределах обычного диапазона с плавающей запятой.

3 голосов
/ 21 апреля 2011

Загрузите и ознакомьтесь с библиотекой Microsoft J # .NET из вашего проекта C #, чтобы вы могли использовать реализацию BigDecimal в 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 # и многочисленные интересныеклассы, которые он выставляет.

...