【发布时间】:2016-03-05 23:59:10
【问题描述】:
我有两个浮点数a 和b。我想检查他们是否有不同的迹象。最简单的方法是看
bool b = a * b < 0;
但是这两个数字非常小,a * b 可能会下溢。还有其他简单的检查方法吗?
如果有人认为这是一个重复的问题,请给我一个完全符合条件a * b < 0 的答案。请注意,我的问题中未定义 0 的符号。
【问题讨论】:
-
c++11 有signbit。所以,
signbit(a) == signbit(b)将是正确的,两者都具有相同的符号。 -
fwiw,vs2012 似乎没有符号位。不过,2013 年确实如此。你不能把一个数乘以一个大数,比如 1e20f 吗?为确保编译器不会对其重新排序,您可以创建一个 noinline 函数 no_reorder,它只返回其参数,然后使用 no_reorder(a*1e20f)*b。或者只是将一个数字转换为双精度(如果还没有)