2017-09-30 9 views
1

私の物理教師はクラスに苦労しました。私はいくつかのことを計算するプログラムを作成しようとしています。ある時点では、ある量の分子にパーセンテージを乗じる必要があります。 Ulongは6022 * 10^19ほど大きい数字を保持することができないので、.net 4.0からBigIntegerを使用する必要があります。しかし、BigIntegerとdoubleには乗算を適用できません。私は整数だけ必要です。これを回避する方法はありますか?次のように コードは次のとおりです。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."); 
} 
+2

はBigInteger' 'へ' percentage'をキャストします。このように 'inkmoles = pencapmoles *(BigInteger)%;' –

+0

なぜBigIntegerを使用していますか?これらは、倍精度として容易に表現できる物理量(「試行」を除く)です。 –

+0

すべての物理量にdoubleを使用するだけです。整数は、あなたが知っている数量にのみ使用してください**正確に**あるものがどれくらいあるか。 –

答えて

3

あなたがdoubleまたはBigIntegerのいずれかにすべての計算を切り替えたほうが良いでしょう。 C#doubleには、10 よりも大きな値を保持するのに十分な範囲がありますが、答えは多少不正確です。あなたの仕事を解決する目的で十分であることはほぼ確実です。

あなたはBigIntegerに切り替えると、最初の乗算、除算、その後の操作を行います。

inkmoles = (inkmoles * pencapmoles)/molesinbucket;