quelqu'un peut me aider à comprendre comment se traduisent cette 2 expression:c et expression arithmétique java et entre parenthèses
PREMIER
double val = 1/(b-1)/t*log(x1/x2);
Je l'ai cassé avec certains c dans de nombreuses régions, mais je 2 résultats différents:
double val2 = (1/(b-1))/(t*log(x1/x2));
double b,t,x1,x2;
b= 0.1;
t= 0.2;
x1 = 0.3;
x2=0.4;
double val = 1/(b-1)/t*log(x1/x2);
printf ("%1.4e",val);
double val2 = (1/(b-1))/(t*log(x1/x2));
printf ("%1.4e",val2);
if(val!=val2){
printf("different!");
}else printf("its ok");
return 0;
DEUXIEME QUESTION: Y at-il beaucoup de différences de précision de double dans c et java pour les numéros d'ordre très bas?
Merci.
L'arithmétique «double» (ainsi que «flottante») n'est pas précise par sa nature. –
Le problème peut être différent d'ordre d'évaluation des expressions en raison de parenthèses différentes. En général, vous ne devriez jamais comparer précisément deux flottants, mais utiliser la comparaison à distance dans une erreur acceptable. – Olaf
S'il vous plaît faire des recherches sur votre propre. L'arithmétique à virgule flottante est un sujet très complexe. De petits changements peuvent entraîner de grandes variations. Pour l'instant, ** s'il vous plaît ** gardez à l'esprit de ne jamais utiliser le virgule flottante si vous avez besoin de calculs exacts, comme pour les devises. – Olaf