Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Datový typ float - výsledek aritmetické operace

Aktivity
Avatar
Marek Příhoda:24.11.2018 16:14

Ahoj, vrtá mi hlavou, proč výsledek programu

float cislo1, cislo2, soucin;
cislo1 = 3.1;
cislo2 = 5.2;
soucin = cislo1 * cislo2;
printf("%f", soucin);
while (1);
return 0;

je 16.119999

pokud dám datový typ double, tak vyjde součin korektně 16.2. Díky

 
Odpovědět
24.11.2018 16:14
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Marek Příhoda
Martin Dráb:24.11.2018 17:52

Vzhledem k binární reprezentaci čísel v plouvoucí řádové čárce (fypy float, double aj.), která se řídí podle IEEE 754 a vzhledem k malé velikosti typu float kvůli zaokrouhlování dojde k menší odchylce.

Čísla jako 3.1 a 5.2 totiž do datového typu float přesně nezaznamenáš (ani do double, ale ten má větší přesnost, takže na tvém příkladu vše vypadá OK). Pokud jde o řády za desetinnou čárkou, zaznamenáš pouze záporné mocniny dvojky (1/2, 1/4...) a jejich součty, ale nic víc. A třeba 0.1 ze záporných mocnin dvojky nesložíš, i kdybyses rozkrájel :-).

Nahoru Odpovědět
24.11.2018 17:52
2 + 2 = 5 for extremely large values of 2
Avatar
Marek Příhoda:24.11.2018 18:17

Díky za vysvětlení :)

 
Nahoru Odpovědět
24.11.2018 18:17
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.