Fließkommakonstanten in Vorlagencode

8

Ich habe eine Template-Funktion, die mit einem Gleitkomma-Argument arbeitet. Die Funktion ist als Vorlage vorgesehen, sodass ein Aufrufer entweder float , double oder einen anderen Gleitkomma-Datentyp verwenden kann.

An einem Punkt in meinem Code vergleiche ich einen Wert mit Null (oder einer anderen Gleitkommakonstante). Soll ich 0.0 oder 0.0f für den Vergleich verwenden?

%Vor%

Obwohl das im Moment keine Probleme verursacht, würde ich gerne wissen, wie es üblich ist.

    
Agnel Kurian 28.05.2011, 14:38
quelle

3 Antworten

13

Ich würde vorschlagen,

%Vor%     
Alexandre C. 28.05.2011, 14:45
quelle
7

Ich würde einfach 0 vorschlagen. Gemäß den Regeln für die Promotion für numerische Typen wird 0 auf den Typ des Gleitkomma-Operanden a hochgestuft. Die Promotion einer Konstante ist eine Kompilierungszeit-Umwandlung, die Ihr Programm nicht verlangsamt.

Andererseits wird durch die Verwendung von 0.0 die Laufzeitkonvertierung des anderen Operanden verdoppelt, was wahrscheinlich kein Problem ist, da der Operand höchstwahrscheinlich ohnehin in einem FPU-Register übergeben wird. 0.0f führt nicht zur Konvertierung von Gleitkommaoperanden, aber wenn die Vorlage jemals mit einem ganzzahligen Typ verwendet wurde, erhalten Sie eine Laufzeitkonvertierung in float .

    
Ben Voigt 28.05.2011 14:42
quelle
1

Sie sollten nicht für Gleichheit auf Fließkommazahl mit einem einfachen

vergleichen %Vor%

weil es meistens nicht zu dem Ergebnis führt, das Sie erwarten. Sie sollten prüfen, ob value genug ist, die der erwarteten Zahl entspricht. Das ist:

%Vor%

wo Epsilon ist etwas klein genug für Ihre Anwendungsdomäne.

    
Simone 28.05.2011 14:54
quelle

Tags und Links