double型 とfloat型についての質問です。
超初歩的なことで申し訳ないんですが・・・・
printf 関数でdouble型を出力するときに %f か %lf かを使うかで迷います。
あるサイトでは「double型なら%fを使えばいい、%lfは間違い」とあり、違うサイトでは「%f、%lfどちらでもよい(または、l←エル は省略可)」とありました。
いったいどちらを信用したらよいのでしょうか??
いったいどっちが・・・・
Re:いったいどっちが・・・・
printf() では、"%f" が正解です。(double も float も)
scanf() では、double * は、"%lf", float * は、"%f" です。
実は、printf() のような、「可変長引数」の関数では、float を渡すと、無条件に double に格上げされます。
解説は、
http://www.kouno.jp/home/c_faq/c15.html
など。
ですから、printf() では、float を渡しても、double を渡しても、double に変換されます。
そして、double は、"%f" という書式指定子が対応しています。
一方で、scanf() の場合は、事情が異なります。
scanf() はポインタを受け取ります。ですから、float * を double * に変換するようなことはできません。
ですから、scanf() では、float * と double * は区別する必要があります。
それぞれの(scanf() における)書式指定子は "%f" と "%lf" です。
scanf() では、double * は、"%lf", float * は、"%f" です。
実は、printf() のような、「可変長引数」の関数では、float を渡すと、無条件に double に格上げされます。
解説は、
http://www.kouno.jp/home/c_faq/c15.html
など。
ですから、printf() では、float を渡しても、double を渡しても、double に変換されます。
そして、double は、"%f" という書式指定子が対応しています。
一方で、scanf() の場合は、事情が異なります。
scanf() はポインタを受け取ります。ですから、float * を double * に変換するようなことはできません。
ですから、scanf() では、float * と double * は区別する必要があります。
それぞれの(scanf() における)書式指定子は "%f" と "%lf" です。