私は2つの浮動小数点数a
とb
を持っています。彼らのサインが違うかどうかチェックしたい。簡単な方法は見てみる2つの数字に異なる符号があるかどうかを調べる簡単な方法はありますか?
bool b = a * b < 0;
しかし、2つの数値は非常に小さく、a * bはアンダーフローである可能性があります。それを確認する他の簡単な方法?
誰でも重複していると思う人は、私には条件a * b < 0
と正確に一致する回答をください。ここで、0の符号は私の質問では定義されていないことに注意してください。
C++ 11には[signbit](http://en.cppreference.com/w/cpp/numeric/math/signbit)があります。だから、何か 'signbit(a)== signbit(b)'はどちらも同じ符号を持つことになります。 – wendelbsilva
fwiw、vs2012はsignbitを持っていないようです。 2013年もそうです。 1e20fのように1つの数字に大きな数字を掛けることはできませんか?コンパイラーが順序を変更しないようにするには、引数を単に返すnoinline関数no_reorderを作成し、no_reorder(a * 1e20f)* bを使用します。 または、1つの数値をdoubleにキャストするだけです(まだない場合) –