Format et précision d'un float (google n'est pas mon amis). Debutant

Format et précision d'un float (google n'est pas mon amis). Debutant - C - Programmation

Marsh Posté le 05-06-2008 à 09:11:56    

Salut à tous et à toutes,
 
Je cherche depuis 10 minutes un petit cours pour formater les float, je me rappelle que l'on peut préciser le nombre de décimales à stocker. Seulement, j'aimerais trouver un cours détaillé sur ce formatage, or je ne trouve rien sur le net. Je dois rentrer les mauvais mots clés.
 
Pourriez vous m'éclairer?
 
Merci


Message édité par jijiz le 05-06-2008 à 09:58:50
Reply

Marsh Posté le 05-06-2008 à 09:11:56   

Reply

Marsh Posté le 05-06-2008 à 09:25:58    

man printf

Reply

Marsh Posté le 05-06-2008 à 09:33:39    

NAME
       printf - format and print data
 
SYNOPSIS
       printf FORMAT [ARGUMENT]...
       printf OPTION
 
DESCRIPTION
       Print ARGUMENT(s) according to FORMAT.
 
       --help display this help and exit
 
       --version
              output version information and exit
 
       FORMAT controls the output as in C printf.  Interpreted sequences are:
 
       \"     double quote
 
       \NNN   character with octal value NNN (1 to 3 digits)
 
       \\     backslash
 
       \a     alert (BEL)
 
       \b     backspace
 
       \c     produce no further output
 
       \f     form feed
 
       \n     new line
 
       \r     carriage return
 
       \t     horizontal tab
 
       \v     vertical tab
 
       \xHH   byte with hexadecimal value HH (1 to 2 digits)
 
       \uHHHH Unicode (ISO/IEC 10646) character with hex value HHHH (4 digits)
 
       \UHHHHHHHH
              Unicode character with hex value HHHHHHHH (8 digits)
 
       \t     horizontal tab
 
       \v     vertical tab
 
       \xHH   byte with hexadecimal value HH (1 to 2 digits)
 
       \uHHHH Unicode (ISO/IEC 10646) character with hex value HHHH (4 digits)
 
       \UHHHHHHHH
              Unicode character with hex value HHHHHHHH (8 digits)
 
       %%     a single %
 
       %b     ARGUMENT as a string with ‘\' escapes interpreted,
 
              except that octal escapes are of the form \0 or \0NNN
 
       and all C format specifications ending with one of diouxXfeEgGcs,  with
       ARGUMENTs converted to proper type first.  Variable widths are handled.
 
       NOTE: your shell may have its own  version  of  printf,  which  usually
       supersedes  the  version  described here.  Please refer to your shell's
       documentation for details about the options it supports.
 
AUTHOR
       Written by David MacKenzie.
 
REPORTING BUGS
       Report bugs to <bug-coreutils@gnu.org>.
 
COPYRIGHT
       Copyright © 2006 Free Software Foundation, Inc.
       This is free software.  You may redistribute copies  of  it  under  the
       terms       of       the      GNU      General      Public      License
       <http://www.gnu.org/licenses/gpl.html>.  There is NO WARRANTY,  to  the
       extent permitted by law.
 
SEE ALSO
       The  full  documentation  for printf is maintained as a Texinfo manual.
       If the info and printf programs are properly installed  at  your  site,
       the command
 
              info printf
 
       should give you access to the complete manual.
 
printf 5.97                      October 2006                        PRINTF(1)


 
C'est où??
 
J'ai testé info printf il y a 30 pages...

Reply

Marsh Posté le 05-06-2008 à 09:39:01    

man 3 printf

Reply

Marsh Posté le 05-06-2008 à 09:46:50    

Merci, peux tu m'expliquer a quoi correspond le parametre 3? stp.
 
Edit : j'ai une seconde question, je calcule divers coefficients de regression lineaire. Je dois ensuite en faire la moyenne et multiplier ces moyennes. Bref je me retrouve avec ce genre de nombre :
 
printf("%.100f",chiffr);
0.9999957084655761718750000000000000000000000000000000000000000000000000000000000000000000000000000000
 
Est-il possible que le langage c rajoute des chiffres erronés dans les décimales qui n'appartienent pas au calcul? Ou est-ce qu'il se débrouille pour ne pas introduire de chiffre superflus?
 
Si je fais :  
 
    a = 0.3232*2;
    printf("%.100F\n",a);
 
a contient 0.6463999748229980468750000000000000000000000000000000000000000000000000000000000000000000000000000000 Hmmm comment éviter ceci?


Message édité par jijiz le 05-06-2008 à 09:57:54
Reply

Marsh Posté le 05-06-2008 à 10:27:40    

Reply

Marsh Posté le 05-06-2008 à 10:32:09    


ok je vais lire ceci. Si la précision n'est pas infinie, un tronquage ne me dérange pas, cependant des chiffres apparaissant comme par magie me pose probleme.

Reply

Marsh Posté le 05-06-2008 à 10:42:25    

bah en gros float ca doit etre 8 chiffres signifcatifs. Quadn tu lui demandes d'en afficher, il affiche ce qu'il peut et il remplit le reste de 0

Reply

Marsh Posté le 05-06-2008 à 10:44:43    

Voir le papier justement. Les IEEE sont codés en binaire selon une certaine méthode. Donc ça "tronque" très peu souvent d'une manière plaisante en base 10. La représentation est la meilleure possible.

Reply

Marsh Posté le 05-06-2008 à 11:01:15    

Je me pose une question par rapport à perl qui représente tout en double par défaut. Quel est le plus grand intervalle d'entiers, avec x et y appartenant à cet intervalle, dans lequel double(x) OP double(y) est exacte ?

Reply

Marsh Posté le 05-06-2008 à 11:01:15   

Reply

Marsh Posté le 05-06-2008 à 11:16:43    

c'est une exemple du papier de tête. Je l'ai aussi fait faire en TP d'architecture, faut que je le retrouve

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed