倍精度と単精度の違いについて読んだことがあります。しかし,ほとんどの場合,「float」と「double」は互換性があり,どちらを使っても結果には影響しないように思われます。これは本当に正しいことなのでしょうか?floatとdoubleはどのような場合に使い分けられるのですか?両者にはどのような違いがあるのでしょうか?
C99規格(ISO-IEC 9899 6.2.5 §10)やC++2003規格(ISO-IEC 14882-2003 3.1.9 §8)には、このように書かれています。
浮動小数点型には3種類あります。浮動小数点型には、
float
、double
、long double
の3種類があります。double型は少なくとも
float型と同等の精度を提供し、
long double型は少なくとも
double型と同等の精度を提供します。float
型の値の集合はdouble
型の値の集合の部分集合であり,double
型の値の集合はlong double
型の値の集合の部分集合である。
C++標準では、次のように追加されています。
浮動小数点型の値の表現は、実装で定義されます。
IEEE浮動小数点規格について詳しく書かれている、優れたWhat Every Computer Scientist Should Know About Floating-Point Arithmeticをご覧になることをお勧めします。表現の詳細について学び、大きさと精度の間にトレードオフがあることを理解できるでしょう。浮動小数点表現の精度は、大きさが小さくなるほど高くなるため、-1〜1の浮動小数点数が最も精度の高い浮動小数点数となります。
浮動小数点は倍精度に比べて精度が低い。すでにご存知の方も多いと思いますが、より理解を深めるために What WE Should Know About Floating-Point Arithmeticをお読みください。