浮動小数点型について
浮動小数点数の内部的な形式は歴史的に様々なものがありましたが、1985年にIntelの提案を元にIEEE 754形式が標準化されて以来、多くのCPUがこれに基づいた形式で浮動小数点型の実数を扱うハードウェアを備えるようになりました。現在のC(C99やC11)では規格の上では浮動小数点型はIEEE754形式に限っていませんが、現実のCPUにおけるCの実装では多くの場合IEEE 754形式に準じており、以下のような浮動小数点型に対応しています。 float
2進法で24bitの精度がある。10進換算で有効数字が6~9桁程度。
2進法と10進法の相互変換には誤差がある。この記法は2進法を10進法に変換した時の有効数字は6桁であるが、10進法を2進法に変換する際には9桁まで表現しないと24bit精度を保つことが出来ないことを表す。
double
2進法で53bitの精度がある。10進換算で有効数字が15~17桁程度。
long double (double以上の浮動小数点数)
IntelやAMDのCPUでは仮数部64bit、指数部-16382~+16383、基数2、総ビット数80の形式が用いられる(拡張倍精度)。 2進法で64bitの精度がある(ケチ表現が使われていない)ので、10進換算で有効数字が18~21桁程度。 M1 macではlong doubleはdoubleと同じもの(なので精度は上がらず意味は無い)
このうちfloatはほとんど使いません。かつて浮動小数点計算は非常に時間がかかるもので、精度を落とした方が高速に実行できた時代がありました。しかし現在ではIntel/AMD系CPUもARM系CPUも、浮動小数点演算はdouble型、もしくはlong double型に対応した浮動小数点演算用ハードウェアを搭載しており、非常に高速に計算ができるようになっています。ハードウェア的にはfloatの計算もできますが、SIMD演算と呼ばれる並列型の計算をする時を除いて速度的に有利になることがありません。floatで表現できる値はdoubleで表現できるため、floatは使われないのです。floatが使われることがあるとすれば、大量の数値演算を行うためにdoubleではデータ量が大きくなりすぎる場合や、上述のSIMD演算が利用可能でfloatの方が明らかに計算が速くできる場合に限られています。
一方long doubleの状況は混沌としています。Cの規格上はdouble以上の精度をもつ浮動小数点型であればよいのですが、IEEE754形式では現在IEEE754倍精度実数よりも高い精度を持つ浮動小数点型をハードウェアで実装したCPUはIntel/AMDのCPU以外にほとんどありません。Intel/AMDが備える拡張倍精度もdoubleに較べて僅かに精度が高いのみです。ですので、多くの環境ではlong doubleがdoubleより大幅に高い精度を備えることは期待できません。
結論として現状では、特に理由がない限りはCの浮動小数点型としてはdoubleだけを使うことをお勧めします。将来のCPUがIEEE754四倍精度を使えるようになり、long doubleにこれが割り当てられた時にはまた状況が変わるかも知れません。