У меня есть номер с плавающей запятой a
и b
. Я хочу проверить, есть ли у них разные знаки. Легкий способ - посмотретьЛюбой простой способ проверить, имеют ли два номера разные знаки?
bool b = a * b < 0;
Но эти два номера очень маленькие, а * 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? чтобы компилятор не переупорядочил его, вы можете создать noinline-функцию no_reorder, которая просто возвращает свой аргумент, а затем используйте no_reorder (a * 1e20f) * b. или просто введите одно число в двойное (если оно еще не указано) –