数学研发论坛

 找回密码
 欢迎注册
楼主: eMath

[测试] 200秒,可以做什么?——测测你的电脑精确计算能力

[复制链接]
发表于 2008-11-19 10:18:11 | 显示全部楼层
import Time
  
  factl :: Integer -> Integer
  factl n = product [1..n]
  
  facthi :: Integer -> Integer -> Integer
  facthi n m = if (n == m) then n else
               if (n > m)  then 1 else
                 (facthi n (n + (div (m - n) 2))) * (facthi (n + (div (m - n) 2) + 1) m)

  facth n = facthi 1 n

  main = do
           t <- getClockTime
           let f = facth 100000
           print (mod f (2^31-1))
           print (t)
           t <- getClockTime
           print t

竟然瞬间返回, 时间在1秒内
看来Haskell也不是废柴啊
如果运行1000000!是6秒
数量级和HugeCalc是一样的, 呵呵
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-11-19 11:51:56 | 显示全部楼层
你的程序里面好像只看到100000而不是1000000
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-11-19 13:54:25 | 显示全部楼层
我改成1000000运行过一次啊
老大
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-11-20 07:56:27 | 显示全部楼层

回复 11# 无心人 的帖子

你给出代码的算法,就阶乘本身来说,与先完全因数分解后再计算复杂度确实相当,
但后者仍将快那么一点,因为可以充分调用平方运算。

在同样的机器上,HugeCalc 计算 1000000! 需要多长时间。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-11-20 11:29:47 | 显示全部楼层
你给我打包个测试程序
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-11-20 12:32:56 | 显示全部楼层

回复 15# 无心人 的帖子

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-11-20 17:27:19 | 显示全部楼层
1.27左右
21.23未带FFT优化的
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-11-20 20:44:27 | 显示全部楼层
Haskell 有这个表现看来还是不错的,至少其大数乘法是用了些高级算法的。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-11-20 21:07:12 | 显示全部楼层
haskell用的是GMP库
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-11-20 21:11:39 | 显示全部楼层
原来如此啊。
我说咋也这么强呢(虽然还不及 HugeCalc)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2020-10-27 14:51 , Processed in 0.131787 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表