Lorsque l'on regarde un morceau de code récemment, je suis tombé sur une ligne qui me avait penser:Le produit de deux flotteurs positifs peut-il être négatif?
if a*b > 0:
# do stuff
Il faut supposer que a
et b
sont flotteurs.
Question: Est-il
possible qu'il existe (très faible, positif, et probablement près de ~ eps_mach) les valeurs dea
etb
de telle sorte que leur produit est négatif? Si non, pourrait-il être que nous avonsa*b==0
avec nia==0
nib==0
.
Pour ne pas être un empoté complet, voici mes pensées:
Non, il est possible puisque dans FP l'arithmétique du produit est probablement défini de telle sorte que les bits de signe de
a
etb
déterminez le bit de signea*b
. Ainsi, à un certain niveau de base, le calcul s'exécute "Bit de signe de note dea
est positif." Bit de signe de note deb
est positif. J'imagine que cette convention est spécifiée et universellement classée quelque part à condition qu'elle existe.Le
a*b==0
aveca!=0
etb!=0
semble certainement possible.La réponse dépend de l'ordinateur et de la langue.
Cela me conduit à une sous-question:
Question:
Serait-il plus sûr de mettre en œuvre le code ci-dessous? Si ce n'est pas plus sûr, comment devrait-il être fait?
if (a>0 and b>0) or (a<0 and b<0):
# do stuff
@old_timer Pourquoi voudriez-vous attendre à un NaN plutôt que l'infini positif? –
@old_timer IEEE754 appelle l'infini, tout comme la spécification du langage Java. D'autres langues peuvent faire quelque chose de bizarre, mais je m'attendrais généralement à l'infini. Cela fait une différence parce que NaN> 0, comme toutes les comparaisons de NaN, est faux. –
Ill supprimer mes commentaires. –