attention, l'astuce est bonne à savoir MAIS elle peut se comporter incorrectement si les nombres sont tres grands...
ex:
- Code: Tout sélectionner
#include <iostream>
#include <climits>
int main(){
int a = INT_MAX;
int b = 2;
std::cout<<(a*b)<<std::endl;
//affiche -2 alors que a et b sont positifs
return 0;
}
la raison c'est qu'en vrai, un entier peut etre stocké dans une taille limitée, et si on fait rentrer des nombres plus grands que prévus, alors on peut récupérer un nombre stocké "invalide".
(ce n'est pas le cas pr brython basé sur python3 mais c'est le cas pour d'autres langages)
En l'occurrence, pr être tranquille, on peut simplement utiliser
f(m) >0 && f(a)>0 || f(m)<0 && f(a)<0
cqui est la traduction de f(m) et f(a) sont tous les deux positifs... ou tous les deux négatifs
attention, j'ai glissé une coquille sauras-tu la retrouver..