浮動小数点数と整数を以下のように掛け合わせると、すべての乗算が異なる結果につながるのはなぜですか?私の期待は一貫した結果でした。私はどちらの場合も、int値が乗算の前に暗黙的にfloatに変換されると考えました。しかし、違いがあるようです。この異なる扱いの理由は何ですか? int/floatの乗算が異なる結果につながるのはなぜですか?
int multiply(float val, int multiplier)
{
return val * multiplier;
}
int multiply2(float val, int multiplier)
{
return float(val * multiplier);
}
float val = 1.3f;
int result0 = val * int(10); // 12
int result1 = 1.3f * int(10); // 13
int result3 = multiply(1.3f, 10); //12
int result4 = multiply2(1.3f, 10); // 13
は、おそらくあなたのために何が起こる
これは実際のコードですか?私は両方に対して同じ結果を得て、なぜそれが違うのか分かりません。 –
2番目の式はコンパイル時に評価できます - どのコンパイラを使用していますか?それが生成するバイトコードを見てください。 – Floris
Ubuntuでg ++ 4.7.3を試してみてください:両方の乗算が13 – gturri