我正在我的应用程序中进行计算,并将我的问题缩小到tan函数。
Configuring GHCi with the following packages: 
GHCi, version 8.6.5: http://www.haskell.org/ghc/  :? for help
Loaded GHCi configuration from /private/var/folders/w2/m3v3grd53s191ys4wjc1tcnr0000gn/T/haskell-stack-ghci/2a3bbd58/ghci-script
Prelude> fov = 0.7853981633
Prelude> tan fov
0.9999999998051035
Prelude> :t fov
fov :: Fractional p => p
Prelude> fov = 0.7853981633 :: Double
Prelude> tan fov
0.9999999998051035
Prelude> :t fov
fov :: Double
Prelude> 
Run Code Online (Sandbox Code Playgroud)
当我tan在手机(或我尝试过的任何其他计算器)上使用时,我得到的答案是:
0.0137086425
Run Code Online (Sandbox Code Playgroud)
所以,看起来 Haskelltan是错误的,但这会非常令人惊讶。
我通常Double在我的应用程序中使用,但指定Double如上所示并不重要。
我还认为这是一个舍入问题,并想尝试舍入到小数点后 4 位,但似乎除了 Haskell 中的 Integer 之外,您不能将 Double 舍入为任何内容?这对我来说也很奇怪。
有人可以解释一下吗?
该tan :: Floating a => a -> a取入的角度弧度。所以这意味着 0.7853981633 弧度大约是 45 度。
您的手机可能使用以度为单位的角度。我们可以通过乘以 将度数转换为弧度pi / 180,所以如果我们计算0.7853981633 度数,我们得到:
Prelude> tan 0.7853981633  -- radians
0.9999999998051033
Prelude> tan (0.7853981633 * pi / 180)  -- degrees
1.3708642532692942e-2
Run Code Online (Sandbox Code Playgroud)
度数的结果大约是3.269294210350715e-11关闭的,这可能是因为您只指定了十位小数。