Heim > Backend-Entwicklung > C++ > Warum ist die Addition von 0,1f bei Gleitkommaberechnungen deutlich langsamer als die Addition von 0?

Warum ist die Addition von 0,1f bei Gleitkommaberechnungen deutlich langsamer als die Addition von 0?

DDD
Freigeben: 2024-12-29 20:17:17
Original
135 Leute haben es durchsucht

Why is Adding 0.1f Significantly Slower Than Adding 0 in Floating-Point Computations?

Auswirkungen der Verarbeitung denormalisierter Zahlen auf die Leistung

Im bereitgestellten Code ergibt sich der signifikante Leistungsunterschied zwischen dem Hinzufügen von 0,1f und 0 in der inneren Schleife aus dem Umgang mit denormalisierten Gleitkommazahlen.

Denormalisiert Zahlen

Denormalisierte Zahlen stellen Werte dar, die extrem nahe bei Null liegen und werden verwendet, um die Genauigkeit der Gleitkommadarstellung zu erhöhen. Ihre Verarbeitung kann jedoch erheblich langsamer sein als bei normalisierten Gleitkommaoperationen.

Auswirkungen auf die Leistung

Die innere Schleife umfasst mehrere Operationen an Gleitkommazahlen und die Addition von 0,1 f führt die Einführung denormalisierter Zahlen in die Berechnung ein. Da die überwiegende Mehrheit der Zahlen in der Schleife relativ groß ist, führt die Addition eines kleinen Werts wie 0,1f dazu, dass das Ergebnis auf den nächsten denormalisierten Wert abgerundet wird, was sich erheblich auf die Leistung auswirken kann.

Konvertierung von Gleitkommazahlen in Ganzzahlen

Während sich die Frage auf die Addition einer Ganzzahl (0) bezieht, verwendet der eigentliche Code eine Gleitkommakonstante (0,0f). In der Schleife werden beide Werte in Gleitkommazahlen umgewandelt und anschließend als solche behandelt. Daher trägt dieser Aspekt nicht direkt zum Leistungsunterschied bei.

Denormalisierung vermeiden

Um den durch denormalisierte Zahlen verursachten Leistungseinbruch zu mildern, kann man den _MM_SET_FLUSH_ZERO_MODE( _MM_FLUSH_ZERO_ON)-Funktion, um den Prozessor anzuweisen, denormalisierte Zahlen als Null zu behandeln. Dadurch wird der Code deutlich schneller ausgeführt und ist mit der Version vergleichbar, die 0 hinzufügt.

Fazit

Der Leistungsunterschied zwischen dem Hinzufügen von 0,1f und 0 in diesem speziellen Fall Das Code-Szenario ist in erster Linie auf die Verwendung denormalisierter Zahlen zurückzuführen, die Gleitkommaoperationen auf bestimmten Prozessoren erheblich verlangsamen können. Die Vermeidung einer Denormalisierung durch geeignete Techniken kann diese Auswirkungen auf die Leistung mildern.

Das obige ist der detaillierte Inhalt vonWarum ist die Addition von 0,1f bei Gleitkommaberechnungen deutlich langsamer als die Addition von 0?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage