基本型には、整数と実数があります。
整数型の基本は int、実数型の基本は double で、とくに事情がなければ普段はこれらを用います。
整数型では特殊な指定や例外的な仕様でないかぎりC言語では
char や short といった型は、いったん int 型まで値を拡張した後、演算されます。
また関数の引数においてもcharやshortと宣言されていても実際の引数渡しでの(スタックに取られるであろう)サイズは
int になります。
対して実数(浮動小数点)で int と同じような役割の型は、どちらかというと、
double 型になります。
標準化前K&R初版においては、float型は double型に一旦拡張されてから演算
されるというルールで、標準ライブラリのmath.hの関数も float型でなく double型
を用いるものばかりになっています。
(※例外で scanf系の入力指定はfloatが基準……大っ嫌いだ、scanfなんて:-)
名前からすると float のほうが基本に感じますが実用上は整数型での short のような
存在で double のほうが基本的な扱いだったというわけです。
もっとも標準(ANSI)化後はそうでくなり、float同士での演算ですむならばコンパイラはdoubleに変換せずにfloat同士で演算してもよい、となっています.
おそらく、C言語誕生当初の(想定された)実数の利用用途からすれば、
floatのほうが速度・メモリの効率がよいというメリットよりも表現できる値の範囲が
狭いというデメリットが重要視されて double が基本になったのだと思われますが
(普通はfloatは32ビットで doubleは64ビットでしょうか)、
マイコンやパソコンでも利用され出すと精度よりも速度・メモリのほうにメリットを
見出す用途が増え、必ず double に変換されるルールのままでは float値を有効活用
できない
(キャストをしたところで結局doubleに変換されるので、どないあがいても利用できない)
となったため標準化では、そのように変更されたのでしょう。
char や short がintに拡張されるのは目をつぶれるオーバーヘッドとしても floatが
doubleに変換され絶えずdoubleで処理するのは無視できないコストだと
思う人が多かったわけでしょう。
もっとも、そうはいっても標準ライブラリは double が基本ですし、わかりずらい
型変換ルールのことを思うと、よほど メモリや速度を気にする
用途(配列にする場合とか)でないかぎり、基本的には double を使うものだと
したほうがよいと思われます。
実際には、文法や移植性なんてどうでもよく要求される効率を求めなければならない
場合はあり、そのような要求のためにコンパイラによっては効率重視で標準とは違う
規則を提供する(選択できる)ものもあります。たとえばdoubleをfloatと
(ビット幅を)同じにする、ようなオプション指定を持つものもあります。
(※ 自分自身が浮動小数点使うこと少ないせいか、いろいろ思い違いをしていて、書き直したら項目の存在が不要なような気もしてきた……どしよ)