(Opomba: Ta članek predvideva, da bralci poznajo osnove računalništva)
Številni začetniki programerji / študentje, ki so vpisani v računalništvo, postavljajo pogosto zastavljena vprašanja, ki so pomembna za določeno področje računalništva, ki ga študirajo. Večina začetnih tečajev se začne s temami številskega sistema, ki se uporablja v sodobnih računalnikih, vključno s binarni, decimalno, oktalno in šestnajstiški sistem. To so formati računalniških številk, ki so notranja predstavitev številskih vrednosti v računalnikih (ali kalkulatorjih in vseh drugih vrstah digitalnih računalnikov). Te vrednosti so shranjene kot "združevanje bitov".
Kot vemo, računalniki predstavljajo podatke v nizih binarnih števk (tj. V kombinaciji 1s in 0s, kot naprimer, 1111 predstavlja 15 v decimalnem sistemu) je smiselno poučiti o različnih oblikah števil, ki se uporabljajo za predstavljanje dinamičnega razpona vrednosti, saj tvorijo osnovne bloke izračuna / števila obdelave pri kateri koli operaciji. Ko je v učilnici definiran sistem številk (pogosto slabo), se učenci zamikajo, da se premaknejo na različne oblike števila znotraj iste vrste (tj.., aritmetika s plavajočo vejico), ki imajo določeno natančnost in obseg števil. Tako so se prisiljeni naučiti nianse med določenimi vrstami. Dve najpogosteje uporabljeni vrsti podatkov sta Plovec in Dvojna, in medtem ko ciljajo na iste potrebe (tj., aritmetika s plavajočo vejico), obstaja kar nekaj razlik v njihovi notranji zastopanosti in splošnem vplivu na izračun v programu. Na žalost mnogi programerji pogrešajo nianse med podatkovnimi vrstami Flat in Double in jih na koncu zlorabljajo na mestih, kjer jih sploh ne bi smeli uporabljati. Posledica tega je bilo napačnih izračunov v drugih delih programa.
V tem članku vam bom povedal razliko med float in double s primeri kod v programskem jeziku C. Začnimo!
Float in Double sta predstavitev podatkov, ki se uporabljajo za aritmetične operacije s plavajočo vejico, pomislite na decimalna števila, ki jih izračunate v matematičnem razredu, kot je npr., 20.123, 16.23, 10.2, itd., niso cele številke (tj., 2, 5, 15, itd.), zato zahtevajo upoštevanje ulomkov v binarni obliki. Kot dobljene decimalne številke (t.j.., 20.123, 16.23, itd.) ni mogoče preprosto predstaviti z normalno binarno obliko (tj. celo število). Glavna razlika med Float in Double je v tem, da je prvi podatek o plavajoči točki z eno natančnostjo (32-bitni), medtem ko je drugi podatkovni tip plavajoče točke z dvojno natančnostjo (64-bitni). Double se imenuje "double", ker je v bistvu dvojna natančnost različice Float. Če računate ogromno (pomislite na tisoč 0-ih v številu), bodo netočnosti v Double-u manjše in ne boste izgubili veliko natančnosti.
Bolje je, da razložite z uporabo kodnih primerov. Sledi delovanje Float in Double s pomočjo matematičnih funkcij v jeziku C:
#include
int main ()
plovec num1 = 1.f / 82;
float num2 = 0;
za (int i = 0; i < 738; ++i)
num2 + = num1;
printf ("%. 7g \ n", num2);
dvojna številka3 = 1,0 / 82;
dvojno število4 = 0;
za (int i = 0; i < 738; ++i)
num4 + = num3;
printf ("%. 15g \ n", številka 4);
getchar ();
Natisne naslednje:
9.000031
8.99999999999983
Tu lahko vidite, da rahla razlika v natančnosti Float-a in Double-a daje povsem drugačen odgovor, čeprav se zdi, da je Double natančnejši kot Float.
Sledi primer funkcije sqrt () v C:
#include
#include
int main ()
float num1 = sqrt (2382719676512365.1230112312312312);
dvojna num2 = sqrt (2382719676512365.1230112312312312);
printf ("% f \ n", num1);
printf ("% f \ n", num2);
getchar ();
Daje naslednji izhod:
48813108.000000
48813109.678778
Tu lahko vidite, da je odgovor v dvojni boljši.
Skupno je za aritmetiko s plavajočo vejico Double uporabiti več, saj več standardnih matematičnih funkcij v C deluje na dvojnih, sodobni računalniki pa so izjemno hitri in učinkoviti za dvojne izračune s plavajočo vejico. To vodi do zmanjšanja potrebe po uporabi Float-a, razen če morate delovati na številnih številkah s plavajočo vejico (pomislite na velike matrike z več tisoč številk 0) ali če delujete v sistemu, ki ne podpira dvojnega oz. natančnost plavajoče točke, saj veliko GPU-jev, naprav z nizko porabo energije in določenih platform (ARM Cortex-M2, Cortex-M4 itd.) še ne podpira Double, potem morate uporabiti Float. Poleg tega si je treba zapomniti eno stvar, da nekateri GPU / CPU delujejo boljše / učinkovite pri obdelavi Float, kot pri izračunu vektorjev / matrike, zato boste morda morali prebrati priročnik / dokumentacijo za strojno opremo, da se boste lažje odločili, katerega naj uporabljate za določen stroj.
Redko je razlog, da v kodi, ki cilja sodobne računalnike, uporabite Float namesto Double. Dodatna natančnost Double-a zmanjšuje, vendar ne odpravlja, možnosti zaokroževanja napak ali druge natančnosti, ki lahko povzroči težave v drugih delih programa. Mnoge matematične funkcije ali operaterji Double in pretvorijo in vrnejo Double, zato vam ni treba, da številke vržete v Float, saj lahko to izgubi natančnost. Za podrobno analizo aritmetike s plavajočo vejico toplo priporočam, da preberete ta super članek (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html).
Torej… na kratko:
Mesta, kjer bi morali uporabljati Float:
V tem članku sem izpostavil razliko med Float in Double in katero naj bi uporabljali na določenih mestih. Zagotovo je Double v večini krajev bolje uporabljati na slepo, še posebej, če ciljate na sodobne računalnike, saj so možnosti nizke učinkovitosti zaradi uporabe aritmetike Double s plavajočo vejico zelo malo verjetne. Če imate kakršna koli vprašanja, lahko to postavite v spodnjem razdelku za komentarje!