ホームページ >バックエンド開発 >C++ >Printf() が float を double に昇格させるのはなぜですか?

Printf() が float を double に昇格させるのはなぜですか?

DDD
DDDオリジナル
2024-11-17 08:09:03531ブラウズ

Why does Printf() promote floats to doubles?

詳細: Printf() が浮動小数点数を倍精度浮動小数点数に昇格させる理由

Printf() が浮動小数点パラメータを double に昇格させる理由単に可変長関数だからというだけではありません。 C 標準および C 標準によれば、可変個引数関数へのすべての float 引数は渡される前に double にプロモートされます。

C99 標準のセクション 6.5.2.2 には、次のように明確に記載されています。「[...] 浮動小数点型パラメータは double にプロモートされます。これらは、デフォルト パラメータ プロモーションと呼ばれます。[...]"

C ドラフト標準セクション 5.2.2このセクションでは、「[...] 浮動小数点型パラメータが浮動小数点昇格 (4.6) の影響を受ける場合、パラメータ値は呼び出し前に昇格型に変換されます。[...]"

さらに、セクション 4.6 では、「float 型の pr 値は double 型の pr 値に変換できます。値は変更されません。」

Cppreference は C をうまく要約しています。変数パラメータ関数のデフォルトの変換: 「

  • std::nullptr_t は void*
  • float パラメータに変換され、浮動小数点昇格と一致します
  • bool 、 char 、 short およびドメインレス列挙は int に変換されます
C では、この変換は K&R C 国際標準 (プログラミング言語 - C) 仕様との互換性を目的としており、次のように明確に述べられています。 、プロトタイプ宣言がない場合、すべてのパラメーターのプロモーションは K&R の説明に従って実行されます

(float から double へのプロモーション を含む)。 「

以上がPrintf() が float を double に昇格させるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。