Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1420 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] besoin important d'une info sur les nombres à virgule flottante

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] besoin important d'une info sur les nombres à virgule flottante

n°584681
giova
Posté le 07-12-2003 à 00:52:16  profilanswer
 

salut tout le monde.
 
voila je découvre les joies du langage C, car pour acceder a une formation C++ j'ai un examen en C a passer dans 1 smaine. j'ai ete initié au java donc j'ai un peu d'espoire ;)
 
Je bloque sur un detail a la con sur un bouquin concernant la precision des nombres a virgule flottante, si vous pouviez lire ce post et me répondre ca serait vraiment hyper sympa. je decris ici ce que je lis, comment je l'interprete, et où je bloque. je suis loin d'etre un bon en math, mais je ne suis pas une burne non plus, merci donc pour votre indulgence :D
 
voici ce qui est ecrit dans le livre :
 

float : 1 bit de signe, 8 bit pour l'exposant , 23 bits pour la mantisse, et la precision est garantie a au moins 6 chiffres apres la virgule.


 
ok vérifions tout ca: 1+8+23 =32bits = 4octets, ca colle, super!
voyons maintenant pour la precision : 2^23 =  8388608 ,c'est un nombre a 7 chiffres, ca nous donne bien 6 chiffres "complets" plus le chiffre le plus fort ne pouvant monter qu'à 8.
 
encore super j'ai pu vérifier les dires du livre, j'obtiens bien par mes calculs un resultat de 6 chiffres garantis. Mais j'en arrive a ma premiere question :
 
 le livre dit

"6 chiffres garantis apres la virgule"

, mais une chose me choque: si par exemple je saisi 12345.6789,  je n'ai que 4 chiffres apres la virgule, donc d'apres le livre je suis ok.
 
 Ce nombre equivaut à 123456789e-4, ok maintenant je regarde de nouveau la taille de la mantisse pour un float, elle est sur 23 bits, ce qui nous fait une plage de valeur possible entre 0 et 8388608. Oh Oh 8388608 est inferieur à 123456789, alors si je comprend bien on a avec un float 6 chiffres garantis mais en tout et pour tout, et non apres la virgule comme indiqué dans le livre. Ai je bien saisi ou est ce que je me lance sur une mauvaise voie là?
 
et voici la partie la plus importante a mes yeux :
 
je vous passe les details pour les doubles, car j'ai fait la meme vérif, et ca colle.
 
passons au long double, le livre annonce :  
 

15bits pour l'exposant , 64 pour la mantisse, 1 pour le signe et 17 chiffres garantis apres la virgule.


 
on vérifie, 15+64+1=80bits=10octets, super ca colle.
 
on passe a la précision : 2^64 = 18446744073709551616
 
et la je compte 19 chiffres "complets" plus le chiffre le plus fort ne pouvant pas depasser 1.
 
oui mais le livre dit 17 chiffres et non 19, j'ai fait un petit programme de test et en effet je n'ai que 17 chiffres precis, apres c'est arrondi.
 
voici donc ma question : quel est la methode pour calculer le nombre de chiffre precis sur les nombres a virgule flottante, ou autrement dit qu'est ce qui cloche dans mon raisonnement?

mood
Publicité
Posté le 07-12-2003 à 00:52:16  profilanswer
 

n°584684
Taz
bisounours-codeur
Posté le 07-12-2003 à 01:16:18  profilanswer
 

http://cch.loria.fr/documentation/ [...] ldberg.pdf
http://docs.sun.com/source/806-3568/ncgTOC.html
 
ln 2 / ln 10 * Nbits
 
au chapitre IEEE


Message édité par Taz le 07-12-2003 à 01:24:25
n°584685
giova
Posté le 07-12-2003 à 01:31:04  profilanswer
 

Merci beaucoup Taz, deja d'avoir eu le courage de lire mon topic :D puis d'etre venu m'aider.
 
je n'ai jeté qu'un rapide coup d'oeuil aux liens que tu m'a fournis, et apparement la methode de calcul pour determiner le nombre de chiffres garantis est bien plus compliqué que ce que j'imaginais :/
 
je lirais ca demain a tete reposée, mais si c'est aussi compliqué que ce que tes documents semblent indiquer, je sens que je vais devoir me préparer une petite antiseche  :p

n°584686
Kristoph
Posté le 07-12-2003 à 01:33:34  profilanswer
 

Dans les nombres flottants, la virgule se place toujours après le premier chiffre et après on applique l'exposant. Donc ton 12345.6789 est en fait "1.23456789e4" et comme ça tu vois bien que tu depasses la capacité maximale de 6 chiffres après la virgule.

n°585040
giova
Posté le 07-12-2003 à 21:11:01  profilanswer
 

En effet kristoph  :D  
 
sinon taz, quand j'applique la formule que tu ma donné, je retombe sur 19  :p  
 
Vu que le temps presse (j'ai jusqu'a lundi prochain pour connaitre le B.A.BA du C) je n'ai pas le temps de lire les docs de tes liens, mais merci quand meme :)
 
quelqu'un pourrait il me dire finallement combien de chiffre apres la virgule sont garantis avec un long double? 17? 19? plus? moins?
 
encore merci [:acherpy]


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] besoin important d'une info sur les nombres à virgule flottante

 

Sujets relatifs
besoin d'un petit coup de pouce pour programmer awele en adabesoin d info sur les divers languages informatique appliqués au net
Besoin d'aide sur les <div>...traiter le point du pavé numerique (remplacer par une virgule?)
[conseil a donner inside] Besoin de conseil de debut en prog![noob][mysql] ou trouver les info pour peupler ma base
[Python] JPython : besoin de votre avis !pour crée une appli ASP.net, j'ai besoin de koi ?
[VBS] Besoin d un petit coup de main 
Plus de sujets relatifs à : [C] besoin important d'une info sur les nombres à virgule flottante


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR