2015-09-19 1 views
0

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.

+0

L'arithmétique «double» (ainsi que «flottante») n'est pas précise par sa nature. –

+0

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

+0

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

Répondre

2

multiplications et les divisions se fait de gauche à droite, donc égal à:

((1/(b - 1))/t) * log(x1/x2); 

Cela diffère de votre val2 que le journal est « au-dessus de la ligne de division ».

+0

Vous avez fondamentalement raison sur l'erreur, mais il s'agit de l'associativité de l'opérateur, pas de l'ordre d'évaluation (il n'y a pas de point de séquence dans l'expression). Pourtant, la comparaison pourrait encore échouer après la correction. – Olaf

+0

merci, pouvez-vous m'aider avec la deuxième expression? – michele

+0

sûr: x1 = x1 + (h [j] * exp (-lambda [j] * t)); Plus de devoirs que vous voulez faire :) –