Ho due numeri in virgola mobile a
e b
. Voglio controllare se hanno segni diversi. Il modo più semplice è quello di vedereUn modo semplice per verificare se due numeri hanno segni diversi?
bool b = a * b < 0;
ma i due numeri sono molto piccoli e a * b potrebbe essere underflow. Qualche altro modo semplice per controllarlo?
Chiunque pensi che sia una domanda doppia, per favore, forniscimi una risposta che corrisponda esattamente alla condizione a * b < 0
. Nota qui il segno di 0 non è definito nella mia domanda.
C++ 11 ha [signbit] (http://en.cppreference.com/w/cpp/numeric/math/signbit). Quindi, qualcosa 'signbit (a) == signbit (b)' sarà vero con entrambi hanno lo stesso segno. – wendelbsilva
fwiw, vs2012 non sembra avere un segnale. Il 2013 sì, però. non puoi semplicemente moltiplicare un numero con un numero grande, come 1e20f? per assicurarti che il compilatore non lo riordini, puoi creare una funzione noinline no_reorder che restituisce semplicemente il suo argomento, e quindi usa no_reorder (a * 1e20f) * b. o semplicemente un numero a un doppio (se non lo è ancora) –