2010-01-06 7 views

Répondre

11

Multipliez-les ensemble.

Si la réponse est positive, alors ils sont tous les deux le même signe.

Si la réponse est négative, ils sont de signe opposé.

Si la réponse est zéro (dans une certaine valeur pour prendre en compte l'erreur d'arrondi) alors l'un ou les deux sont zéro et vous devrez les vérifier individuellement. Vous devrez alors décider si 0 sera traité comme positif ou négatif dans votre scénario.

+0

qu'en est-il de zéro? – Simon

+0

@Simon - Je viens de me rendre compte que & mis à jour ma réponse – ChrisF

+0

en regardant moi-même à nouveau, la règle OPs est ambigu car zéro n'est ni + ve ni -ve. – Simon

2

Il suffit de faire quelque chose comme:

if float1*float2<0 
    Error 
0
function isSameSign(a,b){ 
    var r = a*b; 
    return (r >= 0) 
} 
7

Bien peut être fait la détection du signe du produit, ce n'est pas ce que vous êtes intéressé par Surtout si vous allez l'utiliser sur grand. volumes de flottants (par exemple pour détecter un passage à zéro dans un flux temporel).

Le plus simple est d'exprimer exactement ce que vous demandez: le signe d'un égal au signe de b?

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

ou moins:

function samesign(a, b) { return (a>=0) == (b>=0); } 
+0

+1 Meilleure solution qu'une multiplication. Comme tout le monde le remarque dans d'autres réponses, il est important de coder clairement et sans astuces. Sauf si vous avez d'autres concers comme l'optimisation – Toad