Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: numere reale  (Citit de 1502 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
seby
Strain


Karma: -1
Deconectat Deconectat

Mesaje: 4



Vezi Profilul
« : Martie 15, 2013, 14:26:07 »

Am si eu o problema...
Se poate ca un numar citit cu float sa nu fie citit cum trebuie?
De exemplu:
scanf("%f",&k);
In fisierul de intrare am k=0.1
Iar cand urmaresc in watch k=0.100000001
Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #1 : Martie 15, 2013, 15:20:46 »

Pai da, float are cea mai rea precizie, pana pe la a 6-a zecimala (logic, doar ca e mai rea de atat). Asfel ca double-ul, urmatorul dupa el si cel mai des folosit, ar afisa corect, si chiar si cu long double. Citeste pe cplusplus.com.
Memorat
pauldb
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #2 : Martie 15, 2013, 15:26:13 »

Problema in sine nu e cu citirea, ci cu modul in care sunt reprezentate numerele cu virgula pe calculator. Intre oricare doua numere intregi, exista o infinitate de numere rationale si nu e posibil sa folosesti o codificare distincta (in binar) pentru fiecare numar rational (fapt posibil pentru numerele intregi dintr-un anumit interval fix). De aceea, numerele rationale sunt uneori rotunjite la cel mai apropiat numar ce poate fi codificat.
Memorat

Am zis Mr. Green
new_programmer
Strain


Karma: -1
Deconectat Deconectat

Mesaje: 22



Vezi Profilul
« Răspunde #3 : Martie 16, 2013, 05:19:21 »

@pauldb
Scheme nu in binar tine 30/40? 30 in binar, alaturi de 40 in binar?

@Marinescu Sebastian-Ioan
C si fratii sai au foarte mari probleme cu inregistratul de numere care nu sunt intregi, a fost creat pentru programarea sistemelor de operare, nu pentru implementari matematice. Pentru aceste feluri de implementari exista alte limbaje de programare ca si scheme sau MATLAB, unde "interpreter-ul" tine in memorie numerele rationale ca si fractii (e.g 30/40), iar cand face operatii cu ele, le executa ca si oamenii (cel putin la scheme). Exista moduri de a implementa in C aceste tipuri de numere, problema este ca iti va lua foarte mult timp (si implementatul, si studiatul). Daca vrei sa implementezi un proiect de natura matematica iti sugerezi sa folosesti alternative, ca si cele pe care ti le-am scris, iar la competitii, se da o margine de eroare in care te poti incadra. Ca sa te asiguri ca te incadrezi in aceea eroare, citeste o carte buna despre tipul float.
« Ultima modificare: Martie 16, 2013, 05:29:07 de către Pop Armin » Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #4 : Martie 16, 2013, 14:03:56 »

Nu mai folosi float, are precizie foarte proasta. Pune peste tot double, daca iti permite limita de memorie.
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines