C言語の本を読んでいるのですが、%f, %e, %g, %a
printf変換仕様は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」と読む必要があると説明されています(つまり、浮動小数点数p
はpower-of-two
に引き上げ)。この場合、「1.91EB86 16」は「1.5700000524520874 10」です。これに「2 1 」を掛けると、「3.140000104904175 10 」になります。
これには、精度のすべてのビットを保存し、それらを堅牢な方法で表示するという便利な特性もあることに注意してください。たとえば、これを使用して浮動小数点数をテキストとしてシリアル化することができ、繰り返し/無限小数を心配する必要がなくなります。
また、strtod()
16 進形式の浮動小数点数を実際の数値に戻すことができます。100% 確信があるわけではありませんがsscanf()
、ドキュメントがあまり明確ではなく、私は一度も使用したことはありません。