2016-05-21 7 views
0

私はCを学んでいます 変数の1つがintであってもなぜ浮動小数点数を得るのだろうと思いました。整数で割り算されたfloatが浮動小数点を返すのはなぜですか?

float x = 5.0; 
int y = 2; 

float result = x/y; 

私の推測では、その結果は2.00000になりますでしょう。しかし、それは浮動小数点(2.500000)を返す

結果である2つの整数を分割する場合、それは2.000000と思う。 intとfloatを使用すれば、最も正確な値を選ぶことができます。

+2

に切り捨てられます。これは、オペランドの1つが浮動小数点型であるためです。これは、浮動小数点演算を行うのに十分です。 –

+1

1)1つのオペランドが浮動小数点型であるためです。 2)あなたは 'float result'を書いているので、なぜそれが他の何かになると期待していますか? –

+1

ここで*マイナス*はどこで始まりますか? ;)なぜあなたの部門の結果が「2.00000」であると推測したり期待したりするのですか? – lurker

答えて

2

CのUsual arithmetic conversionsのため。同様に、演算式原因変換および収量結果タイプのオペランドを期待

多くのバイナリ演算子:ANSI C標準§3.2.1.5通常の算術変換を引用

。その目的は、結果のタイプでもある共通タイプを生成することです。このパターンは、通常の算術変換と呼ばれます。まず、いずれかのオペランドがlong double型であれば、もう一方のオペランドはlong doubleに変換されます。 [...]そうでない場合、いずれかのオペランドがfloat型であれば、もう一方のオペランドはfloatに変換されます。

強調鉱山。

2

オペレータ/は、両方のオペランドが整数の場合にのみ整数除算を行います。

0

あなたの除算のオペランドの1つがfloatで、もう1つが整数(int,longなど)の場合、結果は浮動小数点になります。

これは、浮動小数点ディビジョンになることを意味します.5を2で割った場合、予想通り2.5になります。

0

まず、resultは浮動小数点型なので、10進値を保持できます。

第2に、オペランドxyの1つが浮動小数点型であるため、戻り値はfloatです。これは、加算、乗算、および減算にも適用されます。

1

intとfloatを使用すると、最も正確な値が選択されないと思います。

これはまったく逆です。一般的な規則は、の前にの算術演算を実行することです。両方のオペランドが、操作に関与する2つの「最も強力な」型に昇格します。

「最も強力な」タイプは、本質的に>float そのlong double>double言う標準コール「通常の算術変換」(C99、§6.3.1.8)、>すべての整数型のルールに従って決定されます。式に整数型のみが含まれている場合は、記述するのに少し時間がかかる他のいくつかのルールがある(6.3.1.1項)。

今、あなたのケースでは、あなたがintfloatを持って、「最良」タイプはfloatので、intは分割を行う前に、floatに昇格されています。

+0

おそらく、「*最も強力な」 - >「*より広い範囲のタイプ*」でしょうか? –

0

コードの結果はfloatであり、したがってfloatが生成されます。 intをanf intで除算すると、2.5が返されますが、結果がintになると結果は2

関連する問題