c est quoi la solution (en java) ? - Java - Programmation
Marsh Posté le 23-11-2004 à 12:55:05
C'est quoi un 'probleme voial' ??
tu affiches un double, normal que tu ais des chiffres après la virgule..
Marsh Posté le 23-11-2004 à 12:55:45
C'est classique. Je t'invite à lire ceci:
http://citeseer.nj.nec.com/goldberg91what.html
Tu cliques sur "PDF" en haut à droite de la page.
Marsh Posté le 23-11-2004 à 12:56:33
GaSPaRD77 a écrit : C'est quoi un 'probleme voial' ?? |
Ah bon ? 10*1,2 ça fait 11,9999999 chez toi ?
C'est ton épicier qui doit être content.
Marsh Posté le 23-11-2004 à 13:03:07
Lam's a écrit : C'est classique. Je t'invite à lire ceci: |
merci, mais c est en englais, et moi et l anglais ca font deux.
peux tu me donner une solution.
je crois qu il y a une solution parce que en C, y a pas ce genre de probleme. en C, il affiche directement 12.
Marsh Posté le 23-11-2004 à 13:08:24
man4surfs a écrit : merci, mais c est en englais, et moi et l anglais ca font deux. |
t'es fâché avec le français aussi visiblement
Marsh Posté le 23-11-2004 à 13:10:09
drasche a écrit : t'es fâché avec le français aussi visiblement |
pkoi ? pour 'englais' ?
faute de frappe.
Marsh Posté le 23-11-2004 à 13:13:37
man4surfs a écrit : merci, mais c est en englais, et moi et l anglais ca font deux. |
Nan, en C aussi ça fait 11,999999, à cause de la représentation interne des flottants. Mais effectivement, par défaut, il arrondit à 12.
Pour le reste, tu te demerdes. J'ai pas beaucoup de patience pour les gens qui refusent d'apprendre l'anglais et qui font de l'info.
Marsh Posté le 23-11-2004 à 13:13:46
manatane a écrit : Parce que tu faisons vraiment de vilaines fautes... |
ok, j ecris rapidement et sans trop reflechir sur l ortho.
enfin, c est pas le but de mon sujet.
avez-vous une solution ?
Marsh Posté le 23-11-2004 à 13:14:42
Lam's a écrit : Nan, en C aussi ça fait 11,999999, à cause de la représentation interne des flottants. Mais effectivement, par défaut, il arrondit à 12. |
merci qd meme.
Marsh Posté le 23-11-2004 à 13:19:32
man4surfs a écrit : ok, j ecris rapidement et sans trop reflechir sur l ortho. |
Lire le papier de goldberg que t'as donné Lam's (ici en HTML), c'est la base de la compréhension des nombres à virgule flottante en informatique
à ma connaissance il n'y a pas de traduction en VF (ce qui est compréhensible: ni les mathématiques ni l'informatique n'ont le français comme langue standard de communication )
Marsh Posté le 24-11-2004 à 16:14:47
masklinn a écrit : Lire le papier de goldberg que t'as donné Lam's (ici en HTML), c'est la base de la compréhension des nombres à virgule flottante en informatique |
salut,
merci.
lorsque je lirai ce papier, qu est ce que je fairais? je devrai reprogrammer l'addition ?
je cherche une solution, peut etre une fonction standard existe.
comment on fait alors pour arriver une somme excate ?
Marsh Posté le 24-11-2004 à 17:41:13
Tu devrais commencer par soigner l'orthographe quand tu postes.
Quand tu auras lu le papier, tu pourras revenir poser d'autres questions.
EDIT : il est même possible d'éditer un message pour corriger des fautes, c'est magique !
Marsh Posté le 24-11-2004 à 19:42:16
Roob a écrit : Essaye de rechercher sur le net des infos sur le type double. |
Pas la peine de chercher, on lui donne le lien sur un plateau.
Surtout que s'il google "IEEE 754" (qui est le standard définissant le type double tel qu'utilisé par C et Java), c'est ce document qui est donné en lien.
Marsh Posté le 25-11-2004 à 14:44:50
Roob a écrit : vraiment desagreables les developpeurs ... |
merci pour toi,
c vrai je suis pas d origine francaise. la langue francaise est ma troixieme langue. donc, tu vois la distance ?!!
en tt cas, ca me gene pas la mentalité francophone.
bonne entente.
Marsh Posté le 25-11-2004 à 18:52:20
une fois que tu aura compris tu pourra par exemple faire ca :
Code :
|
Marsh Posté le 25-11-2004 à 19:59:31
man4surfs a écrit : |
pour faire vite : tu travaille avec des flottant. un ordinateur travaille en binaire. la représentation finie (ou exacte si tu préfères) d'un flotant en décimale est généralement inatégniable en binaire. => 1.2 ne peut pas être sauvegarder de façon exacte en binaire => il y a approximation.
conclusion :
- soit tu veux des chiffres exactes et tu travailles avec des java.math.BigDecimal, ce qui te garantit une représentation exacte des décimale.
- soit tu te contentes d'une approximation et tu affiches tes décimaux avec 2 ou 3 chiffres après la virgule (voir java.text.DecimalFormat) ce qui te donneras visuellement les bons résultats (à moins que tu fasses des calcules très compliqués ou avec des très gros nombres).
Marsh Posté le 29-11-2004 à 14:28:10
Bonjour,
comme les autres l'ont explique avant, ton probleme vient de la capacite forcement limitee de la machine. Ce qui s'ecrit de maniere finie en decimale peut necessiter une infinite de bits en binaire.
C'est un probleme bien connu des numericiens qui ont donc une solution a ca: ne jamais tester l'egalite de 2 nombres L'astuce consiste a se fixer un seuil pour les comparaisons.
Au lieu d'ecrire
Code :
|
tu dois plutot ecrire
Code :
|
C'est un peu plus lourd mais tu n'as pas vraiment le choix. Dans des programmes, j'ai vu un seuil de 1.0e-7 pour le calcul sur les doubles. Y'a surement une raison pour cette valeur mais je ne la connais pas.
l00z
Marsh Posté le 29-11-2004 à 15:38:22
l00z a écrit : Y'a surement une raison pour cette valeur mais je ne la connais pas. |
L'informatique c'est une science, pas une série de recettes de grand-mères.
Si tu veux savoir quelles valeur d'epsilon utiliser, c'est expliqué dans le document de Goldberg (bah oui, il y a une raison pour laquelle on est lourds comme ça).
Marsh Posté le 23-11-2004 à 12:46:42
bonjour,
voila, y a pas tres longtemps que je programme sur java, et la je rencontre un probleme voila :
public class test
{
static public void main(String arg[])
{
int i;
double d=0;
for(i=0;i<10;i++) d+=1.2;
System.out.println(d);
}
}
apres execussion le resultat affiché est : 11.999999999999998
normalement il devrai donner 12 comme somme.
pourriez-vous me resoudre ce probleme ?
je vous remrcie d'avance.
Message édité par man4surfs le 23-11-2004 à 13:03:51