Cで浮動小数点数を使用するたびに表示される小数点以下の桁数を変更したいのですが、それはでFLT_DIG
定義された値と関係がありますfloat.h
か?もしそうなら、どうすればそれを6から10に変更できますか?
0.000000
実際の値が。のような数値を取得しています0.0000003455
。
Cで浮動小数点数を使用するたびに表示される小数点以下の桁数を変更したいのですが、それはでFLT_DIG
定義された値と関係がありますfloat.h
か?もしそうなら、どうすればそれを6から10に変更できますか?
0.000000
実際の値が。のような数値を取得しています0.0000003455
。
ここには 2 つの個別の問題があります: 格納されている浮動小数点数の精度。これはfloat
vsdouble
を使用して決定されます。次に、出力される数値の精度があります。
float foo = 0.0123456789;
printf("%.4f\n", foo); // This will print 0.0123 (4 digits).
double bar = 0.012345678912345;
printf("%.10lf\n", bar); // This will print 0.0123456789
私はこの問題を実験しましたが、float では大きな精度が得られないことがわかりました。しかし、double を使用すると、正しい答えが得られます。小数点以下 10 桁までの精度については %.10lf に言及するだけです
@kosmoplan - 良い質問をありがとう!
@epsalon - 良い反応をありがとう。私も最初に考えたのは、「フロート」対「ダブル」でした。私は間違っていました。実際には「printf/format」の問題であることに気づき、頭を悩ませました。よくできた!
最後に、いくつかの長引く周辺論争を終わらせるために:
/*
SAMPLE OUTPUT:
a=0.000000, x=0.012346, y=0.012346
a=0.0000003455, x=0.0123456791, y=0.0123456789
*/
#include <stdio.h>
int
main (int argc, char *argv[])
{
float x = 0.0123456789, a = 0.0000003455;
double y = 0.0123456789;
printf ("a=%f, x=%f, y=%lf\n", a, x, y);
printf ("a=%.10f, x=%.10f, y=%.10lf\n", a, x, y);
return 0;
}
精度が不足しています。小数点以下の桁数を増やしたい場合は、double
データ型を使用してください。
また、printf()
&coを使っているようです。数値を表示するには - double
s の代わりにs を使用することにした場合は、書式指定子を からにfloat
変更することを忘れないでください- これは double 用です。%f
%lf