Il fait ça aussi votre compilateur ?
Est-ce normal ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 INT a=15; INT b=10; FLOAT c; c=a/b; // donne c=1 !!! // alors que c=1.0*a/b // donne bien c=1.5 !!!
Il fait ça aussi votre compilateur ?
Est-ce normal ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 INT a=15; INT b=10; FLOAT c; c=a/b; // donne c=1 !!! // alors que c=1.0*a/b // donne bien c=1.5 !!!
Est-ce normal ? OUI
a est un Int, donc le calcul a/b dans c=a/b sera fait en Int, puis converti ensuite en float puisque c est un float.
1.0 est un float, donc dans 1.0*a/b, a et b seront convertis en float, puis le calcul sera fait en float et affecté à c
Par contre, si tu fais c = (float)a/(float(b), ton calcul devrait être juste.
A vérifier mais il est possible que
te jette une erreur de division par 0 suivant le compilateur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 int a =15; float b = 0.1; float c = a/b;
Certains compilateurs convertiront b en int avant de faire le calcul pour reconvertir le résultats en float
Oui, j'avais bien compris que mon compilateur ne regardait que le type des opérandes sans tenir compte du type demandé pour le résultat. Je voulais simplement savoir si c'était pareil chez vous. Visiblement c'est le cas. Merci.
Je n'ai pas fait le test car je n'ai pas d'environnement C sous la main, mais c'est en tout cas le comportement normal indiqué dans la norme du C
en C comme en C++, le compilo commence par évaluer le membre de droite, puis assigne le résultat obtenu au membre de gauche. Il voit int / int, donc il fait la division euclidienne.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager