Gibt es in Haskell einen Unterschied zwischen floor und truncate?

7

Gibt es einen Unterschied in der Funktionalität zwischen floor und truncate in Haskell?

Sie scheinen die gleiche Funktionalität zu haben und sie haben dieselbe Typ-Signatur:

  • truncate :: (Integral b, RealFrac a) => a -> b
  • floor :: (Integral b, RealFrac a) => a -> b
Tom Gijselinck 22.08.2017, 07:46
quelle

4 Antworten

16

Ja, für negative Zahlen. Wenn wir die Dokumentation lesen, sehen wir:

  

truncate :: Integral b => a -> b

     

truncate x gibt die Ganzzahl am nächsten x zwischen null und x

zurück

und:

  

floor :: Integral b => a -> b

     

floor x gibt die größte ganze Zahl zurück, die nicht größer als x

ist

Wenn wir also eine negative Zahl wie -3.5 eingeben, erhalten wir:

%Vor%     
Willem Van Onsem 22.08.2017, 07:51
quelle
6

Es ist nicht hakellspezifisch, aber es gibt einen Unterschied zwischen diesen Funktionen. Stockwerk bedeutet die höchste Ganzzahl, die nicht höher als eine gegebene Zahl ist. Verkürzen bedeutet, dass die Länge etwas entfernt wird, in diesem Fall der Bruchteil. Diese haben den gleichen Effekt für Null und positive Zahlen, aber nicht negativ.

Hier ist ein kurzer Vergleich in Python:

%Vor%

Im wesentlichen trunc () geht gegen Null und floor () gegen negative Unendlichkeit.

    
Yann Vernier 22.08.2017 07:53
quelle
3

Beim Blick auf den Quellcode ergibt sich der Unterschied recht schnell:

%Vor%

und

%Vor%

Wir sehen, dass der Unterschied nur bei negativen Zahlen auftritt und so:

%Vor%     
raam86 22.08.2017 07:57
quelle
1

Abschneiden:

%Vor%

Etage:

%Vor%     
Dr. Geek 22.08.2017 07:55
quelle

Tags und Links