gpt4 book ai didi

optimization - 如何优化这段Racket代码?

转载 作者:行者123 更新时间:2023-12-03 15:57:44 25 4
gpt4 key购买 nike

我想计算 1 + 1/2 + 1/3 + ... + 1/100000000 的总和(使用双浮点数)。

使用 SBCL,此代码的运行速度与在 C 中一样快:

(loop for i fixnum from 1 to 100000000 sum (/ 1.0d0 i) double-float)

如何在 Typed Racket 中优化此代码?我试过了
#lang typed/racket

(define: (test) : Float
(for/fold: : Float
([s : Float 0.0])
([i : Fixnum (in-range 1 100000001)])
(+ s (/ 1.0 i))))

(time (test))

这段代码只比无类型代码快一点。我可以更进一步吗?

最佳答案

如果您像 Greg 建议的那样运行 Optimization Coach,它会立即告诉您循环体很慢,因为 /函数正在执行混合算术(在 fixnum 和 flonum 上)。如果您插入 (fx->fl i)代替 i它更快(在我的机器上接近 2 倍)。

另外,如果你在 DrRacket 中计时,你会想用 racket 计时。改为可执行。 DrRacket 添加了有助于开发的调试工具,但不利于计时。

关于optimization - 如何优化这段Racket代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22868795/

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