Wie wird in Haskell ein Dezimalbruch in Rational analysiert?

8

Ich habe an einem Programmierwettbewerb teilgenommen und eines der Probleme Eingabedaten enthalten eine Dezimalzahl im Dezimalformat: 0.75 ist ein Beispiel.

Das in Double zu parsen ist trivial (ich kann read dafür verwenden), aber der Verlust der Genauigkeit ist schmerzhaft. Man muss sehr vorsichtig sein mit Double comparisies (das war ich nicht), was redundant erscheint, da man den Datentyp Rational in Haskell hat.

Wenn ich versuche, das zu verwenden, habe ich entdeckt, dass zu read a Rational eine Zeichenfolge im folgenden Format bereitstellen muss: numerator % denominator , die ich natürlich nicht habe.

Die Frage ist also:

Was ist der einfachste Weg, um eine Dezimaldarstellung eines Bruches in Rational zu analysieren?

Die Anzahl der externen Abhängigkeiten sollte ebenfalls berücksichtigt werden, da ich keine zusätzlichen Bibliotheken in den Online-Judge installieren kann.

    
Rotsor 14.08.2011, 12:26
quelle

3 Antworten

15

Die gewünschte Funktion ist Numeric.readFloat :

%Vor%     
Yitz 14.08.2011, 12:54
quelle
3

Wie wäre es mit dem folgenden (GHCi-Sitzung):

%Vor%

Natürlich müssen Sie Ihr epsilon passend auswählen.

    
bzn 14.08.2011 13:01
quelle
1

Vielleicht würden Sie Extrapunkte im Wettbewerb für die Implementierung selbst erhalten:

%Vor%     
jazmit 17.09.2012 15:09
quelle