You must love Java

Disclaimer: Acest post nu este pentru acei dintre oameni care nu cunosc magia limbajelor de programare.

Ce se tot dau mari calculatoarele astea cand ele habar n-au sa calculeze?
Zau asa! O operatie care pare banala si absolut usor de facut pentru oricine trecut de clasele primare, calculatorul o greseste cu brio si iti pierde o cifra:

    System.out.println(20.4*100); // afiseaza 2039.9999999999998
    System.out.println((long)(20.4*100)); // afiseaza  2039

Deeeci…. daca vrei sa ai o valoare in double si o inmultesti cu 100 ca s-o treci la o valoare long, e posibil sa nu fie asa de simplu cum ti se pare tie. In zelul lui de a-ti arata cu cate zecimale poate el sa calculeze, computerul uita pe undeva o zecimala, se face ca nu-i asa si iti spune ca de fapt atatea au fost de la inceput, te inseli tu cand ii spui ca a gresit.

Stii care e solutia simpla? Sa-i aduni 0.0000000000001 – Ai idee insa ce se intampla acum? Ei  bine, nu! Sigur ca n-ai idee. Doar tu nu gandesti ca un calculator (prima operatie trebuie sa te fi lamurit deja!). Ai crede ca prima valoare afisata ar trebui sa fie 2039.9999999999999 sau daca esti optimist, chiar 2040.00, dar nu… va fi 2040.0000000000001.

Solutia insa functioneaza, conversia la long a valorii rotunjeste cum trebuie, rezultatul e bun, dar inmultirea continua sa fie  complet aiurea.
You must love java!!!!

Anunțuri

1 Comment »

  1. Acel 0.0000000000001 se cheama epsilon. 😀


RSS Feed for this entry

Lasă un răspuns

Completează mai jos detaliile tale sau dă clic pe un icon pentru a te autentifica:

Logo WordPress.com

Comentezi folosind contul tău WordPress.com. Dezautentificare / Schimbă )

Poză Twitter

Comentezi folosind contul tău Twitter. Dezautentificare / Schimbă )

Fotografie Facebook

Comentezi folosind contul tău Facebook. Dezautentificare / Schimbă )

Fotografie Google+

Comentezi folosind contul tău Google+. Dezautentificare / Schimbă )

Conectare la %s

%d blogeri au apreciat asta: