Bonjour,
J'ai besoin de calculer cette valeur :
Est ce qu'il faut que je cast en double comme par exemple :Code:
1
2 double a = 1 / (1 + exp(x) )
Et/ou écrire 1.0 à la place de 1 ?Code:
1
2 double a = (double)1 / ((double)1 + exp(x) )
Merci
Version imprimable
Bonjour,
J'ai besoin de calculer cette valeur :
Est ce qu'il faut que je cast en double comme par exemple :Code:
1
2 double a = 1 / (1 + exp(x) )
Et/ou écrire 1.0 à la place de 1 ?Code:
1
2 double a = (double)1 / ((double)1 + exp(x) )
Merci
Heo,
En principe, ce n'est pas nécessaire, car exp(x) renvoie un double, qui sera donc le type globalement utilisé.
ok, merci
souviron34, vous avez tort. Le résultat d'une opération, division ou pas, se détermine par le type le plus prépondérant. Dans le cas d'une affaire entre double et int, c'est double qui le remporte.Citation:
Envoyé par souviron34
le RESULTAT oui, mais pas forcement l'OPERATION...
Dans le cas presente par le PO, sans les cast, il y a division entiere...
Avant que l'évaluation d'une opération ait lieu les deux opérandes sont TOUJOURS préalablement convertis dans le type du résultat. Par exemple dans 1 / 2.0, 1 est tout d'abord converti en 1.0, le résultat est donc 0.5. Ce n'est pas la même chose que (3 / 2) / 2.0 : Dans ce cas (3 / 2) est d'abord évalué (1) puis converti en 1.0 ...Citation:
Envoyé par souviron34
Ce n'est pas le cas pour les opérateurs de décalage, il y a peut-être d'autres exceptions.
Edit : en fait je ne suis pas sûr que l'opérande de droite n'est pas converti (en plus des conversions automatiques), en tout cas le type du résultat de ces opérateurs-là dépend seulement de l'opérande de gauche.
Non, par exemple si c'est entre un long et un float et que le long est le plus large les opérandes seront quand même convertis en float.
dapounet, je faisais bien sûr allusion aux opérateurs arithmétiques. Il est clair que ce n'est pas le cas pour les autres opérateurs : virgule, point, ->, opérateurs de comparaison (==, !=, etc.), opérateur d'affectation (=), etc.
La formulation de Melem est correcte, bien qu'elle n'apporte pas beaucoup d'informations (en ne précisant pas comment est déterminé le type du résultat)
Ta formulation est parfois erronnée : par exemple, un unsigned int et un long peuvent, sur certaines configurations, donner un unsigned long qui n'est le type d'aucun des deux opérandes.