Kurzusok
/
Elixir
Elixir
/
Tanterv
/
Lebegőpontos számok
Le

Lebegőpontos számok ebben a kurzusban: Elixir

8 feladat

A(z) Lebegőpontos számok fogalomról

Az Elixirben kétféle szám létezik: egész számok és lebegőpontos számok.

A lebegőpontos számok olyan számok, amelyekben a tizedeselválasztó után egy vagy több számjegy áll. A 64 bites, dupla pontosságú lebegőpontos formátumot használják.

float = 3.45
# => 3.45

Az Elixir a lebegőpontos számoknál a tudományos jelölést is támogatja.

1.25e-2
# => 0.0125

Kerekítési hibák

A lebegőpontos számok hírhedtek a kerekítési hibáikról.

0.1 + 0.2
# => 0.30000000000000004

Az ilyen hibák azonban nem az Elixir sajátjai. Minden programozási nyelvben előfordulnak. Ez azért van, mert a számítógépeinken minden adat bináris kódként tárolódik és dolgozódik fel. A bináris rendszerben csak azok a törtek ábrázolhatók pontosan, amelyeknek a nevezője 2^n alakban felírható (pl. 1/4, 3/8, 5/16). A többi tört csak közelítésként ábrázolható.

# 3/4
Float.ratio(0.75)
# => {3, 4}

# 3/5
Float.ratio(0.6)
# => {5404319552844595, 9007199254740992}

Erről a problémáról bővebben a 0.30000000000000004.com oldalon olvashatsz. A Float Toy oldal szép, grafikus magyarázatot ad arra, hogyan alakulnak át egy lebegőpontos szám bitjei tényleges lebegőpontos értékké.

Összehasonlítás

Az egész számok és a lebegőpontos számok egyenlőnek tekinthetők (==), ha ugyanaz az értékük. Mivel azonban különböző típusok, soha nem szigorúan egyenlők (===).

1 == 1.0
# => true

1 === 1.0
# => false

Átalakítás

Az egész és a lebegőpontos számok ugyanabban az aritmetikai kifejezésben keveredhetnek. Ha egy kifejezésben lebegőpontos szám szerepel, az eredmény is lebegőpontos lesz.

2 * 3
# => 6

2 * 3.0
# => 6.0

A lebegőpontos számokat kerekíthetjük (round), felfelé kerekíthetjük (ceil) vagy lefelé kerekíthetjük (floor).

Ha lebegőpontos számot szeretnél lebegőpontos számmá kerekíteni, használd a Float modul függvényeit (Float.round, Float.ceil, Float.floor). Ha inkább egész számot szeretnél kapni, használd a Kernel modul függvényeit (round, ceil, floor).

A lebegőpontos szám egész számmá alakításának egy másik módja, hogy levágjuk a tizedesrészét a trunc függvénnyel.

Float.ceil(5.2)
# => 6.0

ceil(5.2)
# => 6

trunc(5.2)
# => 5
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg

Tanuld meg a(z) Lebegőpontos számok fogalmat

A gyakorlás zárolva

Oldj fel még 4 feladatot, hogy gyakorolhasd a(z) Lebegőpontos számok fogalmat