gpt4 book ai didi

optimization - 如何按照优化教练的建议将 Racket 表达式更改为 Float 类型?

转载 作者:行者123 更新时间:2023-12-03 16:14:19 25 4
gpt4 key购买 nike

我正在使用 Typed Racket 编写一个小型数字程序。我想提高它的性能,安装了Optimization Coach DrRacket 中的插件。但是,我无法在它输出的第一个建议中遵循它的建议。

代码如下(你可以在上下文 here in Github 中看到它):

  (define: 𝛆 : Positive-Integer 20)
(define: base : Positive-Integer 10)
(define: N : Integer (* (+ n 𝛆) (exact-floor (/ (log base) (log 2)))))

优化指导输出如下:

Optimization Coach suggestion

这看起来很简单,对吧? 2可以改为 2.0这产生了优化(线上的红色较少),但是 它是 base我无法触摸的没有得到 TypeCheck error .

定义或类型转换 baseFloat
  (define: base : Float 10.0)
;; or
(log (cast base Float))

造成:

❯ raco exe bellard.rkt
bellard.rkt:31:47: Type Checker: type mismatch
expected: Real
given: Number
in: (/ (log base) (log 2))

如何执行此优化?任何帮助表示赞赏。

最佳答案

这有点傻,但我在 paper that presents Optimization Coach 中找到了我的问题的答案,我读得太仓促了。

Unbeknownst to the programmer, however, this code suffers from a special case in Racket’s treatment of mixed-type arithmetic. Integer-float multiplication produces a floating point number, unless the integer is 0, in which case the result is the integer 0. Thus the result of the above multiplication is a floating-point number most of the time, but not always, making floating-point specialization unsafe



我想这也适用于混合型 ,并将我的代码更改为:
(define: N : Integer (* (+ n 𝛆) (exact-floor (/ (log (exact->inexact base))
(log 2.0)))))

优化由带有绿线的插件确认。

关于optimization - 如何按照优化教练的建议将 Racket 表达式更改为 Float 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31026292/

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