besoin important d'une info sur les nombres à virgule flottante [C] - C - Programmation
Marsh Posté le 07-12-2003 à 01:16:18
http://cch.loria.fr/documentation/ [...] ldberg.pdf
http://docs.sun.com/source/806-3568/ncgTOC.html
ln 2 / ln 10 * Nbits
au chapitre IEEE
Marsh Posté le 07-12-2003 à 01:31:04
Merci beaucoup Taz, deja d'avoir eu le courage de lire mon topic 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
Marsh Posté le 07-12-2003 à 01:33:34
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.
Marsh Posté le 07-12-2003 à 21:11:01
En effet kristoph
sinon taz, quand j'applique la formule que tu ma donné, je retombe sur 19
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
Marsh Posté le 07-12-2003 à 00:52:16
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
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?