【问题标题】:Haskell 64 bit numerical typeHaskell 64 位数字类型
【发布时间】:2010-11-02 21:31:21
【问题描述】:

我正在用 Haskell 编写一个函数来处理超过 32 位 int 长度的数字。我找不到执行此操作的类型,而且我似乎在搜索错误的术语。

它需要能够保存长度约为 2^40 的数字而不会损失任何精度

例子:

addTwo :: Int -> Int -> Int
addTwo a b = a + b

main :: IO()
main = do
    putStrLn ( show ( addTwo 700851475143 1 ) )

【问题讨论】:

  • 具有讽刺意味的是,如果您没有将 addTwo 的签名放入,它会起作用,因为 addTwo 会被推断为多态(即 Num a => a -> a -> a) ,然后对于数字,它会默认为最通用的类​​型,即 Integer
  • 但我不会学到任何东西,这就是重点

标签: haskell types integer numerical


【解决方案1】:

您想要Integer 数据类型而不是Int

addTwo :: Integer -> Integer -> Integer

【讨论】:

    【解决方案2】:

    使用无限精度的Integer,而不是Int

    【讨论】:

      【解决方案3】:

      对于无限精度,请使用整数类型。对于跨平台的 64 位精度,请使用 Data.Int.Int64。两者都可以通过 Hoogle 轻松找到:http://haskell.org/hoogle/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-08-09
        • 2013-11-04
        • 2012-06-29
        • 1970-01-01
        • 1970-01-01
        • 2012-10-20
        • 2014-06-30
        相关资源
        最近更新 更多