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

  FORUM HardWare.fr
  Programmation
  C++

  Stupides double ...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Stupides double ...

n°825179
Wiiip
Pseudo-lurkeur
Posté le 17-08-2004 à 15:56:21  profilanswer
 

A croire que je viens d'apprendre à programmer il y a 2 mois ... Je n'avais jamais remarqué cela avant, PE parceque je fais enfin un travail serieux ...
 
Un probleme STU-PIDE, mais chiant, mais chiant ... J'ai le meme en C, et en java.
 
En somme :  double i=1; double j=-2; j+=i;   !!!!-> j=-1.00000000000000001
C'est tout nul comme ca, tout le monde s'en fout de cette (petite) erreur.
Mais 1) c'est trop chiant que tu l'affiches.
2) quand tu repetes l'operation des millions de fois, avec des calculs pas beaux, ça devient TRES lourd cette "plus du tout petite" erreur.
3) quand tu teste si c'est ==0, bin forcement, non, puisque c'est 0.00000001
 
 Voila. Ya une solution docteur ? Apprendre à mon CPU à compter avec des decimaux ?
 
2ieme pb : le random, le gros random basique livré de base sans includes, c'est rand(). Genial, ce *** de rand est entre 0 et 32XXX minimum, cf la doc En locurence, ils ont choisi 32XXX. Donc si j'ai plus de 32XXX "choses" différentes à init, je vais me faire voir ?
 
 
En gros, c'etait pour pousser un cri.
 
Wiiip - l'herbe est plus verte ailleurs ... Ailleurs ... Mignone, allons voir si Fortan ....

mood
Publicité
Posté le 17-08-2004 à 15:56:21  profilanswer
 

n°825182
Taz
bisounours-codeur
Posté le 17-08-2004 à 16:00:08  profilanswer
 

la seule personne stupide ici c'est toi ...

n°825188
KangOl
Profil : pointeur
Posté le 17-08-2004 à 16:02:20  profilanswer
 

utilise des float :D


---------------
Nos estans firs di nosse pitite patreye...
n°825360
raytaller
Posté le 17-08-2004 à 18:39:54  profilanswer
 

c'est pas du C ni du C++ ni du java, c'est IEEE 764
 
http://www.google.com/search?hl=en [...] tnG=Search
 
1) on peut toujours arrondir  
2) bof, même ajouté des millions de fois, ça reste assez petit et puis si tu as besoin de calculs très précis, tu peux toujours implémenter ta propre représentation des nombres à virgule flottante, mais à part pour des super calculs scientifiques, ça sert pas à grand chose
3) mhgr

n°825364
Taz
bisounours-codeur
Posté le 17-08-2004 à 18:43:16  profilanswer
 

google "floating point goldberg.pdf" J'ai de la chance

n°825370
lunarnet76
Posté le 17-08-2004 à 18:51:15  profilanswer
 

hé moi je capte pas si je fais
#include <iostream.h>
int main(){
 
double i=1;  
double j=-2;  
j+=i;
cout<<"j="<<j;
 
}
ca affiche J=-1
donc g pas d erreur,comment on fait pour avoir l erreur alors?
 
ps: dire a quelqu'un qu il est stupide car il fait est une erreur est réelement stupide, et antipédagogique  :o


Message édité par lunarnet76 le 17-08-2004 à 18:52:57
n°825372
Taz
bisounours-codeur
Posté le 17-08-2004 à 19:00:28  profilanswer
 

comment faire ? ben tu lis le pdf
 
et je ne parle pas du C++ :o

n°825376
lunarnet76
Posté le 17-08-2004 à 19:05:51  profilanswer
 

ah ok lol pas mal...
bon je vais pas essayer c compliké tous c pdf...

n°825380
Wiiip
Pseudo-lurkeur
Posté le 17-08-2004 à 19:17:49  profilanswer
 

Merci lunarnet ^^
Le calcul n'est pas aussi simple, bisarement, c'est quand tu utilise vraiment la chose que ça t'embette ^^.
 
Un petit exemple : (attention, c'est pas beau, mais c'est court au moins)
 
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
int main(int argc, char *argv[])
{
  double i,j;
  i=-1.23;
  j=0;
  while(i)
  {i-=(int)i;
  i*=10;
  j++;
  }
  cout<<j<<endl;
   
   
  system("PAUSE" );  
  return 0;
}
 
(je repete : fait en foutant sur la première page Dev-C++ venue)
Dont si tu trouve comme moi de 1.23 contient 52 chiffres, tu gagne. (ça fait office de generateur aléatoire d'ailleur ^^)
 
 
Justement, pour repondre à Raytaller, tu peux constater qu'entre 3 et 52, il y a un ecart non négligeable, ok, ce programme sert à rien, mais imagine que, même s'il ne t'en viens pas en tête, on peut trouver des projets pour lequelles ce genre d'erreurs deviennent .. pensantes ...
 
Ma propre representation ? Oui je sais, je l'ai déjà fais 2 fois, mais je ne peux pas le faire pour les programme des autres participants au projet ^^.
 
T'façon, le message n'est pas là, je constate simplement que d'autres personnes sont au courrant, je tombe simplement des nues en découvrant qu'un ordinateur, ça sait pas compter !
 
Je vais faire un petit sondage à ce propos ... Combien de personnes iraient penser cela ... Pas le directeur informatique de votre entreprise en tout cas ^^.

n°825384
Taz
bisounours-codeur
Posté le 17-08-2004 à 19:27:16  profilanswer
 

je viens de faire une attaque ...

mood
Publicité
Posté le 17-08-2004 à 19:27:16  profilanswer
 

n°825388
cris56
Posté le 17-08-2004 à 19:30:15  profilanswer
 

ckoistopic?

n°825400
lunarnet76
Posté le 17-08-2004 à 19:56:46  profilanswer
 

euh, tu peux m expliquer a quoi sert le programme, que je comprenne en quoi l erreur est importante?
ps: ca fait quoi ca while(i){} je vois pas du tout ...


Message édité par lunarnet76 le 17-08-2004 à 19:57:47
n°825401
Taz
bisounours-codeur
Posté le 17-08-2004 à 19:58:33  profilanswer
 

le programme il fait n'importe quoi ...

n°825404
lunarnet76
Posté le 17-08-2004 à 20:01:29  profilanswer
 

ah ok lol
mais sinon while(i) c'est une boucle infini non?

n°825410
Wiiip
Pseudo-lurkeur
Posté le 17-08-2004 à 20:14:46  profilanswer
 

pffff, vous etes lourds ...
Quand il compile il fait pas la différence vous savez .. Bande de gnagnagna du code joli ...
"while(i!=0)"
heureux ?
Nan, c'est pas une boucle infinie, et j'avoue que la partie entiere à coup de (int)i, ce n'est pas joli non plus.
 
A la reflexion, le 52 est tout à fait logique ... Cela reste bougrement stressant de se dire que la representation des decimaux est si corruptible ...
Comme quoi ... Il faudrait nous apprendre à compter en hexadecimal dans les petites classes, au moins nous tomberions d'accord avec nos ordinateurs ...
 
Rectification : les ordinateurs savent compter, mais pas en decimal ^^
 
Wiiip - qui apprend de grandes choses aujourd'hui  
-> Merci à Taz et à Raytaller ! (on se fait engueuler, mais on en sort plus sage ^^)

n°825414
cris56
Posté le 17-08-2004 à 20:19:00  profilanswer
 

ce que ta pas compris c'est qu'on fais jamais de test d'egalité binaire entre 2 reel, test le delta

n°825418
lunarnet76
Posté le 17-08-2004 à 20:28:48  profilanswer
 

wiiip a écrit :

pffff, vous etes lourds ...


désolé mais moi je suis débutant alors si je vois un truc comme ca je test et j essaie de comprendre, c comme ca k on apprend !!!  :D  
la preuve ca ma fait me posé une question sur while(i)!!!

n°825420
cris56
Posté le 17-08-2004 à 20:31:55  profilanswer
 

0 est faux, le reste vrai
 
while(1); boucle infinie
 
while(i) { /* affect i */ }  boucle jusqu'a ce que i == 0

n°825423
lunarnet76
Posté le 17-08-2004 à 20:37:21  profilanswer
 

merci cris56, mais bon je suis ok que je devrais arreter d etre flemmard et me promené avant de posé d questions comme celle la!!!
merci encore a tous ceux qui sont obligés de supportés les flemmars comme moi :D


Message édité par lunarnet76 le 17-08-2004 à 20:37:55
n°825429
bjone
Insert booze to continue
Posté le 17-08-2004 à 20:43:04  profilanswer
 

lis le PDF de Taz bordaiiillll.
 
par contre je suis étonné, 1 et 2 sont exprimables en virugle flottante..... (sans probs)


Message édité par bjone le 17-08-2004 à 20:43:46
n°825432
Taz
bisounours-codeur
Posté le 17-08-2004 à 20:49:18  profilanswer
 

pourquoi étonné ? ça te paraît pas être des puissances de deux ?

n°825486
bjone
Insert booze to continue
Posté le 17-08-2004 à 21:40:53  profilanswer
 

bin si donc justement ça devrait pas poser de probs à l'addition et à l'affichage... enfin je me comprends (je sais pas si tu as compris ce que je voulais dire...)

mood
Publicité
Posté le   profilanswer
 


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

  Stupides double ...

 

Sujets relatifs
[C++] Conversion de CString en doubledouble jointure "sur un même champ"
[Java] Question bête sur le double héritagecomment faire un double lien?
help please...vba double clique sous formulairedouble lien
double include[RESOLU] Eviter la double validation de formulaire "bouton précédent"?
double pb vb excelMmap probleme d allocation memoire d un tableau double entrée
Plus de sujets relatifs à : Stupides double ...


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)