2012-02-21 12 views
0

での浮動小数点値を読んで、私は(パース)を認識するために何の問題もない解析と私はHaskellのでパースに取り組んでいますハスケル

946685561.618847 

ような方法で表現したタイムスタンプ値を解析することしかし、私の問題は、結果の種類についてです。私は2つの状況を考えます:

  1. 結果が小数値に関連付けられるように、Haskellに小数型がありますか?
  2. そうでない場合、次に-2 からInt範囲ため、この値を格納する方法 - 1?
+2

これは実際には分数値であるか、これを適切な単位で整数と解釈する方が良いかどうかです。私。入力がミリ秒の値であれば、整数ナノ秒値に変換することができます。 – Ingo

答えて

6

実際には複数の分数タイプがあります。Fractionalクラスもあります。最も一般的に使用される

は倍精度浮動小数点数である、Doubleあります。単精度のFloatを使用することもできます。

もう1つの方法は、Rationalタイプを使用することです。このタイプを使用すると、数字を2つのIntegerの比率で保存できます。 (偶然にも、Integer無制限整数型です。Intは有界バージョンの名前です。)

これらのタイプ(DoubleFloatRationalは)合理的な値を格納するのに適しています。大きい整数値を保存するだけの場合は、無制限のIntegerを使用します。 (すなわち、任意の大きさの整数を格納することができます)

+1

これらは、もちろん、例えば、 'read" 123.456 ":: Double"、 'read"のような構文を必要とする 'Rational'以外は15432%125" 'です。 – dflemstr

+1

必要な精度が(ahem)_fixed_の場合は、RationalではなくData.Fixedを使用します。私はIEEE floatを格納している別のシステムと相互運用していない限り、Doublesを格納することには注意が必要です。高速計算が必要な場合は、シリアル化とデシリアライズ時にFixed to Doubleを変更すると、期待どおりの丸めが得られます。 –

関連する問題