C言語における浮動小数点数の動作ルールは何ですか?
C言語における浮動小数点数の計算規則は次の通りです:
- 精度:C言語では、浮動小数点数は通常IEEE 754規格で表され、単精度浮動小数点数(float)は4バイト、倍精度浮動小数点数(double)は8バイトを使用します。単精度浮動小数点数は約6〜7桁の有効数字を表すことができ、倍精度浮動小数点数は約15〜16桁の有効数字を表すことができます。
- 浮動小数点演算時には、精度の損失が生じる可能性があります。これは、浮動小数点数の表現が有限であり、実数が無限であるためです。たとえば、0.1は二進小数で正確に表現できないため、コンピュータ内で近似値が存在することがあります。
- 浮動小数点演算時、丸め誤差が発生する可能性があります。これは、浮動小数点の表現が固定桁の2進小数であり、すべての実数を正確に表現することができないためです。演算を行う際、結果が表現範囲を超えてしまうと、最も近い表現可能な値に丸められるか切り詰められることがあります。
- 浮動小数点演算によっては、オーバーフローやアンダーフローが発生することがあります。結果が表現可能な範囲を超えると、オーバーフローが発生し、結果は正の無限大または負の無限大に切り捨てられます。逆に、結果が小さすぎて表現できない場合、アンダーフローが発生し、結果はゼロに切り捨てられます。
- NaNと無限大:C言語では、不明確または表現できない結果を示す特別な浮動小数点数値が提供されています。NaN(Not a Number)は無効な操作結果を表し、例えば0/0です。無限大(Infinity)は表現範囲を超えた結果を表し、例えば1/0です。
- 演算規則:C言語での浮動小数点演算は、基本的な算術演算規則(加算、減算、乗算、除算)に従います。ただし、浮動小数点演算は丸め誤差や精度減少の可能性があるため、浮動小数点数を比較する際には適切な精度範囲を使用することが重要であり、直接等号を使用して比較するべきではありません。
要点は、C言語における浮動小数点数の演算ルールにおいて、精度、精度の損失、丸め誤差、オーバーフローとアンダーフロー、そして特殊な値であるNaNや無限大に注意を払うことです。浮動小数点数の演算を行う際には、これらの問題に注意し、誤った結果を避けるようにする必要があります。