快速计算大浮点数就像0.4 ^ 1亿,任何想法?

时间:2011-04-21 00:49:04

标签: c# performance bigint computation bigfloat

嗯......我遇到了问题 我有一个计算结果是超过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;

    }

其中K为1000,N为1001

2 个答案:

答案 0 :(得分:6)

如果您不需要所有数字,则可以使用对数来逃避。 (0.4 ^ 100000000)的日志为log(0.4)*100000000,完全在常规浮点范围内。

答案 1 :(得分:3)

从C#项目中下载并引用Microsoft J#.NET库 - 以便您可以使用J#的BigDecimal实现。

见:

Arbitrary-Precision Decimals in C#

  

大十进制:

     

安装J#运行时(它是免费的):   http://www.microsoft.com/downloads/en/details.aspx?familyid=f72c74b3-ed0e-4af8-ae63-2f0e42501be1&displaylang=en

和:

Arbitrary precision decimals in C#?

http://geekswithblogs.net/gyoung/archive/2006/05/01/76869.aspx

  

J#re-distributables包含非常多   经过充分测试的实施   你可以使用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, and More

  

虽然您可以搜索网络以查找   C#中的大量实现,   C ++,以及其他各种语言,   可能没有必要。如果你   不介意依赖   J#库,你已经很大了   在你的号码实施   处置。事实上,你有两个。该   J#运行时库,vjslib.dll,是   可作为可再发行的   组件,就像.NET一样   框架。你可以从下载   Visual J#下载(它也是   作为Visual的先决条件安装   工作室)。以与C#相同的方式   或者C ++应用程序可以使用   Microsoft.VisualBasic.dll(Visual   基本运行时库),C#,Visual   Basic®和C ++应用程序可以使用   J#运行时库和   很多有趣的课程   暴露。