小数类型在Haskell中

liu*_*ng1 4 haskell

我想在Haskell中使用有理数字类型而不是派系类型(或者在C中使用float/double类型)

我得到以下结果:

8/(3-8/3)=23.999...
8/(3-8/3)/=24
Run Code Online (Sandbox Code Playgroud)

我知道Data.Ratio.但是,它支持Data.Ratio上的(+)( - )(*)(/)操作:

1%3+3%3 == 4 % 3
8/(3-8%3) == 24 % 1
Run Code Online (Sandbox Code Playgroud)

我已经检查过Racket:

(= (/ 8 (- 3 (/ 8 3))) 24)
#t
Run Code Online (Sandbox Code Playgroud)

8/(3-8/3) == 24在Haskell中确保什么是正确的方法?

n. *_* m. 8

在链中的某处使用显式类型.它将强制使用正确的类型执行整个计算.

import Data.Ratio

main = do
    print $ 8/(3-8/3) == 24
    print $ 8/(3-8/3) == (24 :: Rational)
Run Code Online (Sandbox Code Playgroud)

打印

False
True
Run Code Online (Sandbox Code Playgroud)