2015-11-06 18 views
9

Haskell RealFloat typeclass, documentation'a göre, 'Bağımsız değişken bir IEEE kayan nokta sayısıysa' (ve aksi halde, bir başkası olduğu düşünülemezse), isIEEE adlı bir işleve sahiptir.Haskell, her zaman Doğru olarak değerlendirilirse, neden AIEEE'ye sahiptir?

Ama burada Float için isIEEE uygulanması bulunuyor:

instance RealFloat Float where 
    ... 
    isIEEE _ = True 

Ve burada Double için uygulama görebilirsiniz: neden kullanılır, isIEEE ise

instance RealFloat Double where 
    ... 
    isIEEE _ = True 

daima koşulsuz True mı? Neden Prelude'de var?

+11

Sadece bu değil mi, kendi durumları değil anlamına gelmez. – leftaroundabout

+0

@leftaroundabout Bekleyin, aslında kendi kayan nokta tipinizi tanımlayabilirsiniz? –

+7

@WanderNauta Bu, türlerinizin bir örneği olarak sahip olabileceğiniz işlevleri sağlayabildiğiniz sürece, tiplerin noktasıdır. – Koterpillar

cevap

7

leftaroundabout ve Koterpillar yorumlarında belirtildiği gibi, kendi RealFloat örneklerinizi tanımlamak mümkündür. Bu ısmarlama float tipleri, IEEE standartlarına uymak zorunda değildir. senin kayan nokta tipi IEEE değilse

instance RealFloat MyFloat where 
    isIEEE _ = False 
    ... 

Ek olarak, tüm RealFloat yüklemler olması return false izin verilir:

(...) fonksiyonları isNaN, isInfinite, isDenormalized, isNegativeZero ve , IEEE standardı kullanılarak temsil edilen tüm destek numaralarıdır. IEEE olmayan kayan nokta sayıları için, bunlar yanlış döndürebilir. Sadece `ieee754 itaat ghc ile gelen örneklerini RealFloat` çünkü

Haskell 98 Report, 6.4.6

İlgili konular