2012-08-12 17 views
10

以下に、操作が一見同じであるが、結果が1ずつ異なる2つのシナリオがあります。プログラミングを説明する必要はないと思います。異なる答え:2つの単純な同一整数計算?

変数宣言が最初にあり、シナリオ1は1)と2 = 2)、得られた結果は各シナリオの最後にリストされます。

ご協力いただければ幸いです。

int intWorkingNumber = 176555; 

int intHundreds = 1; 

int intPower = 1; 

1)

int intDeductionValue = (intHundreds * 100 * pow(1000, intPower)); 

intWorkingNumber -= intDeductionValue; 

intWorkingNumber = 76555 

2)

intWorkingNumber -= (intHundreds * 100 * pow(1000, intPower)) 

intWorkingNumber = 76554 
+0

'ダブルPOW(ダブルベース、二重式);' - 整数演算ではないFPなので、あなたのような結果が期待されます。 –

+0

J Steenに感謝します。コードのために字下げの書式を編集してくれてありがとうございます。 – Beginner

+0

@マーク最後の疑問符に注意してください。文は「これらの2つの単純な同一の整数計算ですか?」という意味になっています。それでも、助けてくれてありがとう。 – Beginner

答えて

17

あなたはint型にキャストすると2つのコードサンプルとの差です。

最初のバージョンは、あなたがあなたが引く前を整数にキャストし、このコードに似ています

intWorkingNumber = 176555 - (int)(1 * 100 * pow(1000, 1)); 

番目のバージョン、あなたが引く後を整数にキャストする場合は、次のようになります。

intWorkingNumber = (int)(176555 - (1 * 100 * pow(1000, 1))); 

powは浮動小数点数を返します。 1 * 100 * pow(1000, 1)の結果がでない場合、正確には100000.0000になります(浮動小数点演算では、通常は正確な結果に頼るべきではありません)。

この単純な例で考えてみましょう:

x = 10 - (int)0.001; // x = 10 - 0;  => x = 10 
y = (int)(10 - 0.001); // y = (int)9.999; => y = 9 
+3

'pow'はこれを意味するために浮動小数点数を返します。 – Puppy

+0

@DeadMG:記載されています。コメントありがとう。 –

+0

@マーク答えに感謝します。 – Beginner

関連する問題