gpt4 book ai didi

OCaml 中的整数取幂

转载 作者:行者123 更新时间:2023-12-04 00:01:42 25 4
gpt4 key购买 nike

OCaml 中是否有整数取幂函数? ** 仅用于 float 。虽然它似乎大部分是准确的,但是否存在精度错误的可能性,例如 2. ** 3. = 8. 有时返回 false?是否有用于整数取幂的库函数?我可以自己编写,但会涉及到效率问题,而且如果还没有这样的功能,我也会感到惊讶。

最佳答案

不在标准库中。但是您可以轻松地自己编写一个(使用 exponentiation by squaring 更快),或者重用提供此功能的扩展库。在 Batteries ,是Int.pow .

下面是一个建议的实现:

let rec pow a = function
| 0 -> 1
| 1 -> a
| n ->
let b = pow a (n / 2) in
b * b * (if n mod 2 = 0 then 1 else a)

如果由于操作非常大的数字而存在溢出的风险,则可能应该使用大整数库,例如 Zarith ,它提供了各种求幂函数。

(您可能需要“模取幂”,计算 (a^n) mod p ;这可以通过在中间计算中应用 mod 来避免溢出,例如在上面的函数 pow 中。)

关于OCaml 中的整数取幂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16950687/

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