C言語のprintf()の書式指定子%a 質問する

C言語のprintf()の書式指定子%a 質問する

C言語の本を読んでいるのですが、%f, %e, %g, %aprintf変換仕様はfloat、およびdoubleデータ型に使用されると書かれていました。現在は%f, %e, %g完全に理解できます。

いつデータ%aを印刷してfloat入力する必要がありますか?double

例を示していただけますか。

ベストアンサー1

フォーマット%a指定子は C99 で新しく追加されました。浮動小数点数を 16 進形式で出力します。これは、ユーザーに数値を提示するために使用するものではありませんが、内部的/技術的な使用ケースでは非常に便利です。

例として、次のコードをご覧ください。

printf("pi=%a\n", 3.14);

プリント:

pi=0x1.91eb86p+1

コメントにリンクされている優れた記事では、これを「1.91EB86 16 * 2 1」と読む必要があると説明されています(つまり、浮動小数点数ppower-of-twoに引き上げ)。この場合、「1.91EB86 16」は「1.5700000524520874 10」です。これに「2 1 」を掛けると、「3.140000104904175 10 」になります。

これには、精度のすべてのビットを保存し、それらを堅牢な方法で表示するという便利な特性もあることに注意してください。たとえば、これを使用して浮動小数点数をテキストとしてシリアル化することができ、繰り返し/無限小数を心配する必要がなくなります。

また、strtod()16 進形式の浮動小数点数を実際の数値に戻すことができます。100% 確信があるわけではありませんがsscanf()、ドキュメントがあまり明確ではなく、私は一度も使用したことはありません。

おすすめ記事