сравнивая два числа с плавающей точкой, чтобы увидеть, являются ли они оба отрицательными или оба положительными - PullRequest
2 голосов
/ 06 января 2010

Эй, ребята, у меня есть 2 числа с плавающей запятой, оба из которых поступают из полей ввода.

Мне нужно сравнить эти 2 числа с плавающей запятой, если одно из них отрицательное, а другое положительное, выдается ошибка. Если они оба положительные или оба отрицательные, это нормально.

Есть идеи?

Спасибо

Ответы [ 4 ]

11 голосов
/ 06 января 2010

Умножьте их вместе.

Если ответ положительный, то оба они имеют один и тот же знак.

Если ответ отрицательный, то они имеют противоположный знак.

Если ответ нулевой (в пределах некоторого значения, чтобы учесть ошибку округления), то один или оба равны нулю, и вам придется проверять их индивидуально. Затем вам нужно решить, будет ли 0 рассматриваться как положительный или отрицательный в вашем сценарии.

8 голосов
/ 06 января 2010

Хотя обнаружение знака продукта может быть сделано, это не то, что вас интересует. Особенно, если вы собираетесь использовать его на больших объемах поплавков (например, для обнаружения пересечения нуля во временном потоке).

Самый простой способ - точно выразить то, что вы просите: знак равенства равен знаку b?

function samesign( a, b ) {
  var aPositive = a >= 0;
  var bPositive = b >= 0;
  return aPositive == bPositive;
}

или короче:

function samesign( a, b ) { return (a>=0) == (b>=0); }
2 голосов
/ 06 января 2010

Просто сделайте что-то вроде:

if float1*float2<0
    Error
0 голосов
/ 06 января 2010
function isSameSign(a,b){
  var r = a*b; 
  return (r >= 0)
}
...