Perl 6 rechnet anders ...

Damals habe ich schon angemerkt, dass Computer auch mit geschickteren Algorithmen rechnen könnten, um möglichst genau zu sein. Die Variante, die Perl 6 umsetzt, ist allerdings so einfach wie brillant. Werte mit Nachkommastellen werden einfach intern als Brüche (rationale Zahlen) gespeichert und so ist 90% des Rechnens einfache Bruchrechnung und damit genauer (und sogar korrekt) als das Rechnen mit Fliesskommazahlen. Allerdings ist das natürlich langsamer, daher kann man auch explizit festlegen, dass man Fliesskommaarithmetik möchte.
Das Beispiel aus dem verlinkten Artikel:
> 1100-1036.04 63.96
Gucken wir uns einmal die Datentypen an:
> say 1100.WHAT (Int) > say 1036.04.WHAT (Rat) > say (1100-1036.04).WHAT (Rat)
Brüche haben einen Zähler und einen Nenner (Perl 6 kürzt automatisch):
> say 63.96.numerator 1599 > say 63.96.denominator 25 > say 63.96.nude (1599 25)
Das ist alles nicht so wahnsinnig spannend. Wer allerdings programmiert, weiss, dass so etwas normalerweise als ungleich ausgegeben wird.
> my $a=1/6 0.166667 > my $b=1/3 0.333333 > if (4 * $a + $b == 1) {say "Ist gleich"} else {say "Ist ungleich"} Ist gleich
Fliesskomma geht auch, aber hier wird für die Darstellung gerundet.
> say 1100e0-1036.04e0 63.96 > say (1100e0-1036.04e0).WHAT (Num)
Kommentare
Ansicht der Kommentare: Linear | Verschachtelt