gpt4 book ai didi

haskell - (^) 的奇怪行为

转载 作者:行者123 更新时间:2023-12-02 20:35:37 25 4
gpt4 key购买 nike

我正在开发一个解谜游戏,其中需要指数函数,所以我定义

exp' :: Int -> Int -> Int
exp' = (^)

奇怪的事情发生了:

*Main> exp' 6 25

-8463200117489401856

但是

*Main> 6^25

28430288029929701376

我找不到我的 exp'ghci(^) 之间的任何差异。

这是一个ghc错误吗?

The Glorious Glasgow Haskell Compilation System, version 8.0.1

最佳答案

I couldn't find any difference

是的,有一些差异。

:t exp'
exp' :: Int -> Int -> Int

:t (^)
(^) :: (Num a, Integral b) => a -> b -> a

:t (^)
-- Num Integral Num
(^) :: (Num a, Integral b) => a -> b -> a

看到了吗?这是关于类型

简单地说,Int 是有界的,因此当超出允许的范围时它可能会溢出为负值:

> (6::Int) ^ (25::Int)

-8463200117489401856

Integer是无界的,因此不会溢出:

> (6::Integer) ^ (25::Integer)

28430288029929701376

因此,要解决此问题,您只需将 Int 更改为 Integer:

exp' :: Integer -> Integer -> Integer
exp' = (^)

您可能想访问https://www.haskell.org/tutorial/numbers.html有关类型和数字的更多详细信息。

关于haskell - (^) 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40376924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com