Diferența între float și dublu - care ar trebui să folosesc? Diferență între

Anonim

(Notă: Acest articol presupune că cititorii știu despre elementele de bază ale informaticii)

Mulți programatori newbie / studenți care sunt înscriși în Computer Science întreabă întrebările frecvente care sunt relevante pentru domeniul special în cadrul științei informatice pe care o studiază. Cele mai multe cursuri începător încep cu subiectele sistemului numeric utilizat în computerele moderne, incluzând binary , zecimal , octal și hexazecimal < sistem. Acestea sunt formatele numărului de computer care reprezintă reprezentările interne ale valorilor numerice în computere (sau calculatoare și orice alt tip de computere digitale). Aceste valori sunt stocate ca "gruparea biților".

După cum știm, computerele reprezintă date în seturi de cifre binare (adică în combinația 1s și 0s , cum ar fi 1111 reprezintă 15 în sistemul zecimal), este logic să predați diferitele formate de numere care sunt utilizate pentru a reprezenta un interval dinamic de valori, deoarece ele constituie blocurile de bază ale procesării de calcul / număr în orice fel de operațiune. Odată ce sistemul de numere este definit în sala de clasă (adesea slab), elevii sunt tentați să se mute pe diferite formate de numere din același tip (de exemplu, aritmetice cu virgulă mobilă ) care au o anumită gamă de precizie și număr. Astfel, ei sunt obligați să învețe nuanțele între anumite tipuri. Două dintre cele mai frecvent utilizate tipuri de date sunt Float și Double , iar în timp ce vizează aceleași nevoi (de exemplu, aritmetica cu virgulă mobilă unele diferențe în ceea ce privește reprezentarea lor internă și efectul general asupra calculului din program. Este regretabil faptul că mulți programatori ratează nuanțele dintre tipurile de date Flat și Double și ajung să le abuzeze în locuri unde nu ar trebui folosite în primul rând. În cele din urmă rezultă în calcularea greșelilor în alte părți ale programului.

În acest articol, vă voi spune diferența dintre float și dublu cu exemplele de cod în limba de programare C. Să începem!

Float vs. Double … Care este înțelegerea?

Float și Double sunt reprezentările de date care sunt utilizate pentru operațiile aritmetice cu punct de plutire, gândiți-vă la numerele zecimale pe care le calculați în clasa matematică, cum ar fi

20. 123 , 16. 23 , 10. 2 etc. nu sunt numere întregi (de exemplu, 2 , 5 , 15 etc). fracții în binar. Ca numere zecimale rezultate (de exemplu, 20, 123 , 16, 23 etc.) nu poate fi reprezentată cu ușurință cu un format binar normal (adică, Integer). Principala diferență dintre Float și Double este aceea că prima este o singură dată de precizie (32 de biți), în timp ce cea de-a doua este tipul de date cu virgulă dublă de precizie (64 biți). Dublul se numește "dublu", deoarece este o versiune dublă de precizie a lui Float. Dacă calculați o sumă imensă (gândiți-vă la mii de cifre în număr), atunci inexactitățile vor fi mai mici în Double și nu veți pierde prea multă precizie.

Este mai bine să elaborați folosind exemplele de cod. Următoarea este operația de la Float și Double prin funcțiile matematice furnizate în limba C:

#include

int principal () {

float num1 = 1. f / 82;

float num2 = 0;

pentru (int i = 0; i <738; ++ i)

num2 + = num1;

printf ("%. 7g n", num2);

dublu num3 = 1. 0/82;

dublă num4 = 0;

pentru (int i = 0; i <738; ++ i)

num4 + = num3;

printf ("%. 15g n", num4);

getchar ();

}

Se imprimă următoarele:

9. 000031

8. 99999999999983

Aici puteți observa că diferența ușoară în precizia Float și Double oferă un răspuns diferit, deși Double pare să fie mai precis decât Float.

-> ->

Următorul exemplu este reprezentat de funcția sqrt () în C:

#include

#include

int principal () {

float num1 = sqrt (2382719676512365. 1230112312312312);

dublă num2 = sqrt (2382719676512365. 1230112312312312);

printf ("% f n", num1);

printf ("% f n", num2);

getchar ();

}

Oferă următoarea ieșire:

48813108. 000000

48813109. 678778

Aici puteți vedea că răspunsul în Double are o precizie mai bună.

În general, este mai bine să utilizați dublu pentru aritmetica cu puncte de plutire, deoarece mai multe funcții de matematică standard din C funcționează pe computerele duble și moderne sunt extrem de rapide și eficiente pentru calculele cu dublu virgulă mobilă. Acest lucru duce la reducerea nevoii de a utiliza Float, cu excepția cazului în care este necesar să operezi pe o mulțime de numere cu virgulă mobilă (gândiți-vă la matrice mari cu mii de cifre în numere) sau dacă lucrați într-un sistem care nu acceptă dublu- punct de virgulă precizie, cât mai multe unități de procesare grafică, dispozitive cu putere redusă și anumite platforme (ARM Cortex-M2, Cortex-M4 etc.) nu acceptă încă Double, atunci ar trebui să utilizați Float. În plus, un lucru de reținut este faptul că anumite unități de procesare grafică / procesoare funcționează mai bine / mai eficient în procesarea cu flotoare, ca în calculul vectorilor / matricei, astfel încât ar putea fi necesar să te uiți în manualul / documentația specificațiilor hardware pentru a decide mai bine care ar trebui să folosești pentru o anumită mașină.

Există rareori un motiv pentru a utiliza Float în loc de Double în codul care vizează computerele moderne. Precizia suplimentară în Double reduce, dar nu elimină, șansele de rotunjire a erorilor sau a altor imprecizii care pot cauza probleme în alte părți ale programului. Multe funcții matematice sau operatori convertesc și returnează Double, deci nu este nevoie să aruncați numerele înapoi la Float, deoarece acestea ar putea pierde precizia.Pentru o analiză detaliată asupra aritmeticii de tip floating-point, vă recomand să citiți acest articol minunat (// docs.oracle.com / cd / E19957-01 / 806-3568 / ncg_goldberg.html).

Rezumat

Deci … pe scurt:

Locuri unde ar trebui să utilizați Float:

Dacă vizați hardware în care precizia unică este mai rapidă decât dubla precizie.

  • Aplicația dvs. utilizează în mod abundent aritmetica cu puncte plutitoare, cum ar fi mii de numere cu mii de cifre.
  • Faceți o optimizare foarte scăzută. De exemplu, utilizați instrucțiuni speciale ale procesorului (de exemplu, SSE, SSE2, AVX etc.) care funcționează pe mai multe numere / matrice / vectori în același timp.
Concluzie

În acest articol am subliniat diferența dintre Float și Double și care ar trebui să fie folosit în anumite locuri. În mod evident, este mai bine să utilizați Double în majoritatea locurilor orbește, mai ales dacă vizează computere moderne, deoarece șansele de eficiență scăzută datorate utilizării aritmeticii cu dublă valoare plutitoare este foarte puțin probabil. Dacă aveți întrebări, puteți întreba în secțiunea de comentarii de mai jos!