Bez floatů by Python určitě nebyl tam, kde je. Je to "lepicí" jazyk pro machine learning a podobné věci. Krmí specializované knihovny velkýma polema floatů.
Různé druhy floatů jsou možná ten nejčastější základní datový typ, co pythoním kódem protéká. Takže s nimi musí umět přiměřeně pracovat, i když třeba pomalu.
Teraz som vyskusal skriptovacie jazyky ktore poznam (REXX, Tcl, Perl, Ruby) a jedine ten najstarsi t.j. REXX ma defaultne presnu decimalnu aritmetiku (to je uplne genialne jak dobre to este v roku 1979 navrhol Mike Cowlishaw). Tie novsie t.j. Tcl, Perl, Ruby maju tak ako Python defaultne float aritmetiku.
Na linuxe je klasicky REXX (nema OOP) Regina
sudo apt-get install regina-rexx
Tak mozes vyskusat
max_i = 10 x = 0 i = 0 do while x <> 1.0 i = i + 1 x = x + 0.1 if i <= max_i then say "#"||right(i, 2, '0')||":"||" "||format(x, 1, 20) else do msg = "Maximum number of iterations (max_i = " max_i ") exceeded !" say "#"||right(i, 2, '0')||":"||" "||msg leave end end
Vystup je presny (presne 10 iteracii)
$ rexx float_vs_decimal.rex #01: 0.10000000000000000000 #02: 0.20000000000000000000 #03: 0.30000000000000000000 #04: 0.40000000000000000000 #05: 0.50000000000000000000 #06: 0.60000000000000000000 #07: 0.70000000000000000000 #08: 0.80000000000000000000 #09: 0.90000000000000000000 #10: 1.00000000000000000000
Oproti tomu co davaju ine jazyky s float aritmetikou (Perl, Tcl, Python, Ruby)
$ perl float_vs_decimal.pl #01: 0.10000000000000000555 #02: 0.20000000000000001110 #03: 0.30000000000000004441 #04: 0.40000000000000002220 #05: 0.50000000000000000000 #06: 0.59999999999999997780 #07: 0.69999999999999995559 #08: 0.79999999999999993339 #09: 0.89999999999999991118 #10: 0.99999999999999988898 #11: Maximum number of iterations (max_i = 10) exceeded ! $ tclsh float_vs_decimal.tcl #01: 0.10000000000000000555 #02: 0.20000000000000001110 #03: 0.30000000000000004441 #04: 0.40000000000000002220 #05: 0.50000000000000000000 #06: 0.59999999999999997780 #07: 0.69999999999999995559 #08: 0.79999999999999993339 #09: 0.89999999999999991118 #10: 0.99999999999999988898 #11: Maximum number of iterations (max_i = 10) exceeded ! $ python3 float_vs_decimal.py #01: 0.10000000000000000555 #02: 0.20000000000000001110 #03: 0.30000000000000004441 #04: 0.40000000000000002220 #05: 0.50000000000000000000 #06: 0.59999999999999997780 #07: 0.69999999999999995559 #08: 0.79999999999999993339 #09: 0.89999999999999991118 #10: 0.99999999999999988898 #11: Maximum number of iterations (max_i = 10) exceeded ! $ ruby float_vs_decimal.rb #01: 0.10000000000000000555 #02: 0.20000000000000001110 #03: 0.30000000000000004441 #04: 0.40000000000000002220 #05: 0.50000000000000000000 #06: 0.59999999999999997780 #07: 0.69999999999999995559 #08: 0.79999999999999993339 #09: 0.89999999999999991118 #10: 0.99999999999999988898 #11: Maximum number of iterations (max_i = 10) exceeded !
12. 4. 2024, 20:46 editováno autorem komentáře
Tak asi kombinace vseho mozneho. Ano, wow efekt noveho sexy projektu tam urcite v pripade Perlu byl, i kdyz z hlediska SW engineeringu je to ukazka toho, jak to nedelat :-) [jenze to se nam lehce mluvi, kdyz vidime vysledky].
Rexx urcite byl prenesenej na Unixy, to vim (sice jsem ho tam nepouzival, ale existoval), mozna ale prisla open source license pozdeji, coz to mohlo na Linuxu zabit.
Jasně. Já teda vůbec nejsem fanouškem Perlu, považuju ho zčásti za podivnou hračku jeho autora a zčásti za DSL pro zpracování textu. Na druhou stranu okolo něj vznikla dost velká komunita a hodně knihoven v CPANu apod. Četl jsem v reakci na Tvůj příspěvek nějakou debatu, kde dost problémů REXXu vyjmenovávali. Přijde mi, že Perl si včas našel niku, kterou neobsadili jiní. A Linux měl shelly, awk, C atd., tak vlastně nevím, jestli byl REXX tak moc potřeba.
A Tcl, který jsi zmiňoval výše, znám vlastně jenom v kontextu Tk. Jazyk (za mě) dost hrozný a ne moc oblíbený.
Preco ten jazyk zapadol? Asi hlavne kvoli politike IBM. REXX bol produkt IBM a pouzival sa hlavne na platformach IBM i, IBM z. Ja som sa s REXXom stretol roku 2002 v praci. Bol to REXX na IBM iSeries a este Object REXX na PC, co bol licencny software od IBM pre windows. IBM predavala Object REXX bez nejakeho dalsieho vyvoja jazyka a open sourcovala ho az dost neskoro - v roku 2004: Open Object REXX. Na wikipedii sice pisu, ze Regina REXX existuje uz od 1992, ale o tom som vtedy vobec nevedel. (https://en.wikipedia.org/wiki/Rexx).
Kazdopadne v tej dobe uz boli na PC vyborne zabehnute jazyky Perl, Tcl a Python2. Ina situacia bola na IBM i kde Perl a Python v tej dobe este neboli a tradicne sa tam pouzival REXX.
13. 4. 2024, 11:29 editováno autorem komentáře