2013-06-01 15 views
20

Ben Haskell beklendiği gibi şeyler Haskell'de yüksek hassasiyetli kayar nokta sayısı?

>> let x = 131242358045284502395482305 
>> x 
131242358045284502395482305 

gibi işin bu yüzden gerçekten büyük tamsayılar için izin yerel veri türlerini olduğunu biliyoruz. Ben kullanıyor olabilir benzer "büyük hassas şamandıra" yerli yapı olsaydı ben mümkün olabilir böylece şeyler

>> let x = 5.0000000000000000000000001 
>> x 
5.0000000000000000000000001 

gibi merak ediyorum. Eğer bunu Haskell'e girersem, ondalık basamakların (çift kesinlik) ötesine geçersem 5'e düşer.

+1

Eh, her zaman kesinlik hassas kesirler için 'Data.Ratio' içinde' Rational' var. Ancak genellikle, cevap, hangi işlemleri desteklemek için ihtiyacınız olduğuna bağlıdır. – Vitus

+0

Sanırım ['Rational'] (http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#t:Rational) amaçlarınız için uygun değil, yani 'Floating' örneği? – leftaroundabout

+2

Mümkün olan en yüksek hassasiyet için: http://www.haskell.org/haskellwiki/Exact_real_arithmetic (AERN uygulaması bir süredir işe yaramadı ... Şu anda başka adaylar olup olmadığını bilmiyorum) – luqui

cevap

16

bağlı Aradığınız tam olarak ne:

  • Float ve Double - hemen hemen bildiğiniz ve tüm diğer dillerde Şamandıralar ve Çiftler gelen "aşk" Ne. Integer s
  • FixedPoint bir Ratio olan
  • Rational - Bu paket rasgele boyutlu sabit nokta değerleri sağlar. Örneğin, 64 tümleşik bit ve 64 kesirli bit tarafından temsil edilen bir sayı istiyorsanız, FixedPoint6464'u kullanabilirsiniz. 1024 integral bit ve 8 kesirli bit olan bir sayı istiyorsanız, FixedPoint1024_8 türünü oluşturmak için $(mkFixedPoint 1024 8) kullanın.
  • DÜZENLEME: Ve evet, yukarıda bahsedilen numbers paketini öğrendim - çok güzel.
+1

Ayrıca, "Base" de [Data.Fixed] (http://www.haskell.org/ghc/docs/latest/html/libraries/base/Data-Fixed.html) bulunmaktadır. – hammar

+4

Ayrıca, hala tam olan, rasyonelleri ve daha fazlasını içerecek ve hesaplanabilir işlemlerden daha fazla zorlayıcı yüklemelere sahip olan [siklogram sayıları] (http://hackage.haskell.org/package/cyclotomic) için bir kütüphane de bulunmaktadır. –

7

Haskell, yüksek hassasiyetli kayan noktalı sayılara sahip değildir.

Bu amaç için bir paket/modül/kitaplık için this answer to another post'a başvurmak isterim. Ayrıca, bu paketin nasıl kullanıldığını gösteren bir örnek de var: numbers.

+1

Bu paketin taleplerine tam olarak uyup uymadığından emin değilim. Sadece kontrol et. ;) –

+0

Ayrıca, [hmpfr paketi] 'ne bir göz atın (http://hackage.haskell.org/package/hmpfr). – vinc17

İlgili konular