小编Mik*_*kel的帖子

GHC优化

下面的两个Haskell函数似乎不同,索引变量是隐式还是显式,但性能差异是两个数量级.

此函数大约需要0.03秒来计算mfib 30:

let mfib = (map fib [0..] !!)
  where
    fib 0 = 0
    fib 1 = 1
    fib x = mfib (x-1) + mfib (x-2)
Run Code Online (Sandbox Code Playgroud)

对于mfib 30,此功能大约需要3秒钟:

let mfib i = map fib [0..] !! i
  where
    fib 0 = 0
    fib 1 = 1
    fib x = mfib (x-1) + mfib (x-2)
Run Code Online (Sandbox Code Playgroud)

我猜它与GHC内联规则有关,并且一直在尝试添加内联/无内置编译指示以获得匹配的性能.

编辑:我理解如何查找惰性列表可以用来记忆fib函数以及为什么传统的fib定义非常慢.我期待memoization在第二个函数以及第一个函数中工作,并且不理解为什么它不是.

optimization haskell ghc

10
推荐指数
2
解决办法
323
查看次数

用于在数据库中存储`DiffTime`的类型

我需要DiffTimetime库中的a 存储在数据库(PostgreSQL)中,并且有三个选项可以转换为数据库类型:

  1. 整数使用 fromIntegral . fromEnum
  2. 通过Rational的数字 toRational
  3. 真实使用 realToFrac

整数是精确的,但相当大,因为存储在皮秒(10 ^ 12).数值也是精确的,但计算a可能非常昂贵Rational,因为它必须计算gcd分子和分母.真实是不准确的,但也许这无关紧要.

我的时间粒度绝不会低于几分钟或大于几天.我需要做出精确的计算.速度可能不是问题.

我应该选择哪个选项以及含义是什么?在处理用户提交的数字时,一般应该避免Rational scientific吗?

database postgresql haskell numbers

2
推荐指数
1
解决办法
68
查看次数

标签 统计

haskell ×2

database ×1

ghc ×1

numbers ×1

optimization ×1

postgresql ×1