[question] Multiplication en C

Choual dev, chouallette dev, j'ai une question à vous posez:
J'ai fait ce petit code pour un exercice ( http://pastebin.com/Quc9ejyv ; ouais c'est pas ouf ) mais je me suis aperçu que si j'essaie de faire 5.2 × 9 ça me sort 46.799999 au lieu de 46.800000.
Pourquoi ?

Poster un commentaire
Miroir
Miroir
8 ans

A cause de la précision du type float, cf les réponses :

http://stackoverflow.com/questions/3031143/why-cant-i-multiply-a-float

superPlot
superPlot
8 ans

@Miroir: les float on une représentation non continue des réel.

charles2404

@Miroir: merci j'irai voir plus tard

charles2404

@Miroir: donc en gros, il y a pas de solution pour multiplier 2 floats en C de manière exacte

Olbaid
Olbaid
8 ans

@charles2404: Exacte non, en revanche le double est plus précis

superPlot
superPlot
8 ans

@charles2404: Il n'y a pas de solution tout cour pour multiplier deux float avec précision.
Il te faut deux réel, en c ce n'est pas un type natif donc il faut que tu passe par une lib.

anonyme
anonyme
8 ans

Tes chiffres après la virgule sont décomposés en puissance de 2 inverse sur des bits : 1/2, 1/4, 1/8, 1/16, etc (chacun étant représenté par un bit).
Mais le nombre de bits nécessaires pour encoder cette valeur peut être trop grand par rapport a ton type de variable (double, float) et donc tu as une approximation.
https://fr.wikipedia.org/wiki/Virgule_flottante#Norme_IEEE_754

bzerath
bzerath
8 ans

C'est pour ça qu'il ne faut surtout pas faire un if (a == b) si ce sont des float :)

Cette page est réservée aux ADULTES

Tu es sur le point d'accéder à un site web qui contient du matériel explicite (pornographie).

Tu ne dois accéder à ce site que si tu as au moins 18 ans ou si tu as l'âge légal pour visionner ce type de matériel dans ta juridiction locale, l’âge le plus élevé étant retenu. En outre, tu déclares et garantis que tu ne permettras aucun mineur à d'accéder à ce site ou à ces services.


En accédant à ce site, tu acceptes nos conditions d'utilisation.