sách gpt4 ai đã đi

hiệu suất - thực hiện (^)

In lại 作者:行者123 更新时间:2023-12-02 04:22:31 33 4
mua khóa gpt4 Nike

我正在阅读标准haskell库的(^)的实现代码:

(^) :: (Num a, Integral b) => a -> b -> a
x0 ^ y0 | y0 < 0 = errorWithoutStackTrace "Negative exponent"
| y0 == 0 = 1
| otherwise = f x0 y0
where -- f : x0 ^ y0 = x ^ y
f x y | even y = f (x * x) (y `quot` 2)
| y == 1 = x
| otherwise = g (x * x) ((y - 1) `quot` 2) x
-- g : x0 ^ y0 = (x ^ y) * z
g x y z | even y = g (x * x) (y `quot` 2) z
| y == 1 = x * z
| otherwise = g (x * x) ((y - 1) `quot` 2) (x * z)

现在定义 g 的部分对我来说似乎很奇怪,为什么不直接像这样实现它:

expo :: (Num a ,Integral b) => a -> b ->a
expo x0 y0
| y0 == 0 = 1
| y0 < 0 = errorWithoutStackTrace "Negative exponent"
| otherwise = f x0 y0
Ở đâu
f x y | even y = f (x*x) (y `quot` 2)
| y==1 = x
| otherwise = x * f x (y-1)

但实际上插入 3^1000000 显示 (^) 比 expo 快约 0.04 秒。

Why is (^) faster than expo?

1 Câu trả lời

作为编写代码的人,我可以告诉您为什么它很复杂。 :)这个想法是通过尾递归来获得循环,并且执行最少次数的乘法。我不喜欢这种复杂性,所以如果您找到更优雅的方法,请提交错误报告。

关于performance - 实现 (^),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38588507/

33 4 0
Bài viết được đề xuất: java - 当我获取 JSON 元素时为空值
Bài viết được đề xuất: neo4j - 更新至: Adding node to Neo4j Spatial Index
Bài viết được đề xuất: r - 在ggplot2和R中为正态分布散点图创建置信区域
Bài viết được đề xuất: pdf - ColdFusion CFPDFFORM 不会填充 PDF 表单字段
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com