私はプログラミングの世界に不慣れで、C++ はすでに私を失いつつあります。プログラムにこれらの行がありました
pennies=(amount-nickels*.05)/.01;
額はa double
、間およびニッケルはint
。
penniesが の場合、プログラムは正しい値を返しますが、penniesが の場合はdouble
常に少しずれています (ほとんどの場合 1 ずれています) 。int
なぜこうなった?
私はプログラミングの世界に不慣れで、C++ はすでに私を失いつつあります。プログラムにこれらの行がありました
pennies=(amount-nickels*.05)/.01;
額はa double
、間およびニッケルはint
。
penniesが の場合、プログラムは正しい値を返しますが、penniesが の場合はdouble
常に少しずれています (ほとんどの場合 1 ずれています) 。int
なぜこうなった?
pennies=(amount-nickels*.05)/.01;
上記の式では、変数 amount(これは double) のため、分子と分母の算術演算は doubleで行われます。ここで暗黙の変換が行われます。最後に、ペニーが double の場合、計算結果はペニーで格納されます。int の場合、計算結果の小数部分は失われます。中間計算は常に double で行われ、ペニーの種類には依存しません。
例
#include <stdio.h>
int main()
{
int a ;
double c,d=10.55555;
a = c= (d+ 10*.5)/0.5 ;
printf("%f : %d/n",c,a);
return 0;
}
出力は次のとおりです。
31.111100:31
ここでは、最初の 10 が float に昇格され、次に 10*.5 が評価され、double 値との加算により double に昇格されます。分子が double であるため、分母も double に変換されるため、計算は double 形式でのみ行われます。 .
式の右側の部分で浮動小数点数を計算しますが、int 値に double を格納しようとします。これを行うと、小数部分が失われます。