|
Titlul: numere reale Scris de: Marinescu Sebastian-Ioan din 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 Titlul: Răspuns: numere reale Scris de: Simoiu Robert din 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.
Titlul: Răspuns: numere reale Scris de: Paul-Dan Baltescu din 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.
Titlul: Răspuns: numere reale Scris de: Iffi Fiffi din 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. Titlul: Răspuns: numere reale Scris de: Andrei Grigorean din Martie 16, 2013, 14:03:56 Nu mai folosi float, are precizie foarte proasta. Pune peste tot double, daca iti permite limita de memorie.
|