2009-06-18 4 views
5

印刷する文字列の正確な長さをdouble値から指定する必要がありますが、必要以上に出力を制限したくありません。C:printf()で印刷するときの長さはどれくらいですか

printf()によってフォーマットされたときに6桁の精度の倍精度が持つ最大長はいくらですか?

特に、値が切り捨てられないようにするには、printf("%X.6lg",doubleValue);でXにどの値を渡す必要がありますか?

長さについて具体的に説明する必要がある理由は、二重値の文字列表現が多数作成されたMPI派生データ型を定義しているため、MPI間でファイルの領域を分割するためには、プロセス。

私はそれがはっきりしていることを望みます。回答には事前に感謝します。

+0

あなたは何を求めているのかわかりません - すべての値を0.123456,1.23456,12345.6などの6桁の長さにしたいですか?または、小数部分が6桁であることだけを気にしますか?小数値については、値が「二項式」(すなわちバイナリで終了)で63/64以下でない限り、切り捨てを避ける方法がわかりません。 –

答えて

6

使用printf("%.6g", doubleValue) 又はprintf("%.6Lg", doubleValue)

注精度指定子で先頭の桁(「幅」)をオフに残して値の整数部分の長さには何の要求をしないこと。

また、小文字の "l"は値がlong intであることを示します。大文字の "L"はlong double値を指定します。

これを科学的表記に変更したくない場合(短い表現の場合)、 "g"の代わりに "f"を使用することに注意してください。

printf reference hereを参照してください。

1

long doubleのDECIMAL_DIGの中で、多くの有用な値を含む< float.h>があります。

同じファイルが最も可能性の高いプラットフォームにダブルが精度以上の6桁の数字を持っていることを教えてくれます...

PS:はまた、上記のデミの答えを注意してください。彼は私を逃れたprintf()のさまざまな欠陥を指摘します。

1

IEEEの倍数の最大指数は1023なので、最大倍数は1 + 1/2 + 1/4 + 1/8 + ...など* 2^1023になります。 10進表記で約318文字になります。

なぜ "e"形式指定子を使用しないのですか?

+0

すべてのプラットフォームがIEEEダブルスを使用しているわけではないため、標準委員会が< float.h > ... – DevSolar

関連する問題