将BigInteger乘以Double

时间:2017-09-30 19:47:34

标签: c# c#-4.0 console-application

我的物理老师给了班级一项艰巨的任务。我试图创建一个程序来为我计算一些东西。在某一点上,我需要将一定数量的分子乘以一定百分比。 Ulong不能容纳6022 * 10 ^ 19的数字,所以我必须使用.net 4.0中的BigInteger。但乘法不能应用于BigInteger和double。我只需要整数。有没有办法绕过这个? 代码如下:

private static BigInteger pencapmoles = BigInteger.Pow(6022/9, 19);
private static BigInteger inkmoles = pencapmoles;
private static BigInteger tries = 0;
private static BigInteger molesinbucket = BigInteger.Pow(26761768, 19);
private static double percentage;
static void Main(string[] args)
{
    while (inkmoles > 1) 
    {
        percentage = (double)(inkmoles / molesinbucket);
        inkmoles = pencapmoles * percentage;
        tries++;
    }
    Console.WriteLine($"It only took us {tries} tries.");
}

1 个答案:

答案 0 :(得分:4)

最好将所有计算切换到doubleBigInteger。 C#double有足够的范围来保持大于10 19 的值,但答案是稍微不精确。几乎可以肯定的是,它足以解决你的任务。

如果切换到BigInteger,请先乘以,然后进行除法:

inkmoles = (inkmoles * pencapmoles) / molesinbucket;