printfでdoubleに%lfを使わないといけないというのは嘘だったという話

2015年7月9日 0 投稿者: khws4v1

てきとーにインターネットのウェブサイトを見てたらC言語のprintf関数で%lfは使わないということを知ってしまいました。

[迷信] double の出力書式は “%lf” | 株式会社きじねこ
http://www.kijineko.co.jp/tech/superstitions/printf-format-for-double.html

C言語。doubleにはfとlfのどちらを使うんですか?教科書にlfと書いてあ… – Yahoo!知恵袋
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1480134649

c++ – Correct format specifier for double in printf – Stack Overflow
http://stackoverflow.com/questions/4264127/correct-format-specifier-for-double-in-printf

はいはい、インターネットのデマなんでしょ?と言われかねないのでC99(ISO/IEC 9899:1999)を調べると・・・

 %lf conversion specifier allowed in printf

どうやらC99になって%lfは認められた模様。
しかし、逆に言えばそれまでは認められていなかったというわけです。

%fと%lfに違いはあるのか

printfではC99でも%fと%lfには違いがありませんでした。
つまり「floatは%f、doubleは%lf」というのはprintfでは間違いです。

doubleの最大値を%fと%lfで表示させましたがどちらも同じ出力結果となります。
つまり、どちらもdoubleの最大値まで表示できるのでdoubleとして出力されていることが分かります。

ちなみにscanfでは%fと%lfで違いがあります
floatでは%f、doubleでは%lfを使わないといけません。

http://melpon.org/wandbox/permlink/8npLasGZnWDBnVip

java

javaにもprintfがあり、C言語のprintfと同じように使えます。
javaのprintfで%lfを使うと例外を投げて死にました。