Unterscheiden Sie Null und negative Null C ++

7

Ich bin auf eine Situation in meinem Code gestoßen, wo eine Funktion ein Double zurückgibt, und es möglich ist, dass dieses Double eine Null, eine negative Null oder ein ganz anderer Wert ist. Ich muss zwischen Null und negativem Null unterscheiden, aber der Standarddoppelvergleich tut nicht. Aufgrund des Doppelformats erlaubt C ++ keinen Vergleich von Doppelpunkten mit bitweisen Operatoren, so dass ich nicht weiß, wie ich vorgehen soll. Wie kann ich zwischen den beiden unterscheiden?

    
Dan Brenner 06.01.2014, 09:15
quelle

3 Antworten

15

Rufen Sie std::signbit() auf, um den Status des Vorzeichenbits zu bestimmen.

    
David Heffernan 06.01.2014 09:22
quelle
6
  

Aufgrund des Doppelformats erlaubt C ++ keinen Vergleich von Doppelpunkten mit bitweisen Operatoren, so dass ich nicht weiß, wie ich vorgehen soll.

Zunächst gibt C ++ keinen Standard für float / double -Typen vor.

Angenommen, Sie sprechen über die Formate binary32 und binary64 der IEEE 754, so sind sie speziell darauf ausgelegt, ihre Reihenfolge beizubehalten, wenn ihre Bit Patterns werden als Integer interpretiert , damit sie von einer Nicht-FPU sortiert werden können; das ist der Grund, warum sie einen voreingenommenen Exponenten haben.

Es gibt viele SO-Posts , die solche Vergleiche diskutieren. Hier ist der relevanteste . Eine einfache Überprüfung wäre

%Vor%

Dies funktioniert seit 0.0f == -0.0f , obwohl es Orte gibt, an denen das Zeichen einen Unterschied macht wie atan2 oder wenn die Division durch -0 im Gegensatz zu +0 zu den jeweiligen Unendlichkeiten führt.

    
legends2k 06.01.2014 09:28
quelle
0

Um explizit für a == -0 in C zu testen, machen Sie folgendes:

%Vor%     
user113670 17.11.2017 21:25
quelle