我需要计算像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
答案 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#运行时库和 很多有趣的课程 暴露。