我有两个浮点数a
和b
。我想检查它们是否具有不同的符号。简单的方法是判断它们是否符号相反。
bool b = a * b < 0;
然而这两个数字非常小,a * b 可能会下溢。还有其他简单的方法来检查它吗?
如果有人认为这是一个重复的问题,请给我一个完全符合条件 a * b < 0
的答案。请注意,在我的问题中,0的符号未定义。
您可以按照以下方式使用std::signbit:
bool c = std::signbit(a) == std::signbit(b);
另一种方法是使用std::copysign,如下所示:
bool c = std::copysign(a,b) == a;
signbit
和copysign
都可以检测零、无穷大和NaN的符号位。 - 101010
signbit(a) == signbit(b)
的值将为真。 - wendelbsilva