gpt4 book ai didi

swift - 使用重写的数学函数

转载 作者:可可西里 更新时间:2023-11-01 00:58:14 25 4
gpt4 key购买 nike

正在尝试编译这段代码

pow(10,2)
struct Test {
var i:Int
func pow(_ p:Int) -> Int { return pow(i,p) }
}
var s = Test(i:10)
s.pow(2)

给我一​​个编译器错误。显然,标准的 math.h 函数 pow 被 Swift 的作用域规则蒙蔽了双眼。这闻起来像是编译器错误,因为 pow 的 math.h 版本具有不同的签名。不过,有什么方法可以调用它吗?

最佳答案

有两个问题:第一个是pow(i,p)是怎么解决的。如 Swift 3.0: compiler error when calling global func min<T>(T,T) in Array or Dictionary extension 中所述, 这个可以通过在函数调用前加上模块名称来解决。

第二个问题是没有pow函数两个整数参数。有

public func powf(_: Float, _: Float) -> Float
public func pow(_: Double, _: Double) -> Double

在标准数学库中,和

public func pow(_ x: Decimal, _ y: Int) -> Decimal

在基金会图书馆。所以你必须选择使用哪一个,例如:

struct Test {
var i:Int
func pow(_ p:Int) -> Int {
return lrint(Darwin.pow(Double(i),Double(p)))
}
}

将参数转换为 Double 并四舍五入结果回到 Int

或者,使用迭代乘法:

struct Test {
var i: Int
func pow(_ p:Int) -> Int {
return (0..<p).reduce(1) { $0.0 * i }
}
}

我观察到 https://codereview.stackexchange.com/a/142850/35991那这对于小指数来说更快。您的里程可能会有所不同。

关于swift - 使用重写的数学函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40111968/

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