C:printf()を使用して印刷した場合、doubleはどれくらい長くなりますか
質問
印刷する文字列の正確な長さをdouble値から指定する必要がありますが、必要以上に出力を制限したくありません。
printf()でフォーマットされたときに6桁の精度のdoubleが持つ最大長は?
具体的には、値が切り捨てられないようにするために、printf("%X.6lg",doubleValue);
でXにどの値を与える必要がありますか?
長さについて特定する必要がある理由は、double値の多くの文字列表現で構成されるMPI派生データ型を定義しており、MPIプロセス間でファイルの領域を分割するために正確な長さを知っている必要があるためです。
それが明確であることを願っています。答えてくれてありがとう。
解決
printf("%.6g", doubleValue)
またはprintf("%.6Lg", doubleValue)
を使用
精度指定子の先頭の数字(<!> quot; width <!> quot;)を省略すると、値の整数部分の長さは要求されないことに注意してください。
また、アンダーケース<!> quot; l <!> quot;値がlong intであることを指定します。大文字の<!> quot; L <!> quot; long double値を指定します。
これを潜在的に科学表記法に変更したくない場合(短い表現の場合)は、<!> quot; f <! > quot; <!> quot; g <!> quot;の代わりに。
printfリファレンスはこちら。
他のヒント
IEEE doubleの最大指数は1023であるため、最大doubleは1 + 1/2 + 1/4 + 1/8 + ...など* 2 ^ 1023です。これは、10進表記で約318文字の長さになります。
<!> quot; e <!> quotを使用しない理由フォーマット指定子?
<!> lt; float.h <!> gt; DECIMAL_DIGなど、多くの有用な値が含まれていますが、これは long double 向けです。
同じファイルで、プラットフォームの double の精度が6桁を超えていることがわかります...
PS:上記のデミの答えにも注意してください。彼は、私を逃れたprintf()のさまざまな欠陥を指摘しています。