Heim >Backend-Entwicklung >C++ >Warum befördert Printf() Floats zu Doubles?

Warum befördert Printf() Floats zu Doubles?

DDD
DDDOriginal
2024-11-17 08:09:03531Durchsuche

Why does Printf() promote floats to doubles?

Deep Dive: Warum Printf() Gleitkommazahlen zu Gleitkommazahlen mit doppelter Genauigkeit hochstuft

Warum Printf() Gleitkommazahlen zu Double hochstuft , nicht nur, weil es eine variadische Funktion ist. Gemäß dem C-Standard und dem C-Standard werden alle Float-Argumente für variadische Funktionen vor der Übergabe auf double heraufgestuft.

Abschnitt 6.5.2.2 des C99-Standards besagt eindeutig: „[...] Parameter vom Typ Gleitkomma werden auf Double heraufgestuft. Diese werden als Standardparameter-Promotionen bezeichnet. [...]“

In Abschnitt 5.2.2 des C-Standardentwurfs heißt es außerdem: „[...] Wenn ein Gleitkomma-Typparameter von der Gleitkomma-Heraufstufung (4.6) betroffen ist, wird der Parameterwert vor dem heraufgestuften Typ konvertiert Aufruf. [.. .]“

Außerdem heißt es in Abschnitt 4.6: „Ein PR-Wert vom Typ Float kann in einen PR-Wert vom Typ Double konvertiert werden.“

Cppreference fasst C gut zusammen. Die Standardkonvertierung variabler Parameterfunktionen: „

  • std::nullptr_t wird in void* konvertiert
  • float-Parameter wird in Übereinstimmung mit Gleitkomma konvertiert Promotion
  • bool-, char-, short- und domainless-Enums werden im Einklang mit der Integer-Promotion in int oder breitere Ganzzahlen konvertiert

In C dient diese Konvertierung der Kompatibilität mit K&R C The In der Spezifikation des Internationalen Standards (Programmiersprache – C) heißt es eindeutig: „Aus Gründen der Kompatibilität mit der bisherigen Praxis werden in Ermangelung von Prototypdeklarationen alle Parameter-Promotionen wie von K&R beschrieben durchgeführt, einschließlich Float zu Double Die Verbesserung . „

Das obige ist der detaillierte Inhalt vonWarum befördert Printf() Floats zu Doubles?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn