C++でバイナリファイルから浮動小数点を読む時の定番手法はどんな感じでしょうか?

整数読むときみたいに、ios::binaryを設定した後、ifstreamのreadで読もうとしても
ifstream.read( char*, int)
なので1byte単位での読み込みになり、1bit仮数部だけの読み込みはできないですし、
atofはアスキーデータからしか変換できません。

どんな方法で浮動小数点読み込むのがベターですか?
やっぱり<cstdio>のfread使うのでしょうか。