有什么简单的方法可以检查两个数字是否有不同的符号?

Any simple way to check if two numbers have different signs?

我有两个浮点数ab。我想检查它们是否有不同的标志。简单的方法是看

bool b = a * b < 0;

但是这两个数很小,a * b可能会下溢。还有其他简单的检查方法吗?

任何认为这是重复问题的人请给我一个完全符合条件 a * b < 0 的答案。请注意,我的问题中 0 的符号未定义。

您可以按如下方式使用 std::signbit

bool c = std::signbit(a) == std::signbit(b);

LIVE DEMO

另一种方法是使用std::copysign,如下所示:

bool c = std::copysign(a,b) == a;

另一个解决方案是:

bool c = ((0 > a) == (0 > b));