Ich habe zwei Gleitkommazahl a
und b
. Ich möchte prüfen, ob sie unterschiedliche Zeichen haben. Der einfache Weg ist zu sehenGibt es eine einfache Möglichkeit zu überprüfen, ob zwei Zahlen unterschiedliche Zeichen haben?
Aber die beiden Zahlen sind sehr klein und a * b könnte Unterlauf sein. Eine andere einfache Möglichkeit, es zu überprüfen?
Wer denkt, es ist eine doppelte Frage, bitte geben Sie mir eine Antwort, die genau die Bedingung a * b < 0
entspricht. Beachten Sie, dass das Vorzeichen von 0 in meiner Frage nicht definiert ist.
C++ 11 hat [signbit] (http://en.cppreference.com/w/cpp/numeric/math/signbit). Also wird etwas "signbit (a) == signbit (b)" wahr sein, wenn beide das gleiche Vorzeichen haben. – wendelbsilva
fwiw, vs2012 scheint nicht signbit zu haben. 2013 tut es jedoch. Kannst du nicht einfach eine Zahl mit einer großen Zahl multiplizieren, wie 1e20f? Um sicherzustellen, dass der Compiler sie nicht neu anordnet, können Sie eine noinline-Funktion no_reorder erstellen, die einfach ihr Argument zurückgibt, und dann no_reorder (a * 1e20f) * b verwenden. oder einfach eine Zahl zu einem Doppelklick (wenn es noch nicht ist) –