我没有在Swift语言参考中看到基本算术运算符中定义的取幂运算符。
语言中是否真的没有预定义的整数或浮点运算运算符?
答案 0 :(得分:78)
没有操作员,但你可以使用这样的pow功能:
return pow(num, power)
如果你愿意,你也可以让操作员调用pow函数:
infix operator ** { associativity left precedence 170 }
func ** (num: Double, power: Double) -> Double{
return pow(num, power)
}
2.0**2.0 //4.0
答案 1 :(得分:22)
如果您恰好将2提升到某个功率,则可以使用按位左移运算符:
let x = 2 << 0 // 2
let y = 2 << 1 // 4
let z = 2 << 7 // 256
请注意&#39;电源&#39;价值比你想象的要少1。
请注意,这比pow(2.0, 8.0)
快,可以避免使用双打。
答案 2 :(得分:12)
对于寻找**
中缀运算符的Swift 3版本的任何人:
precedencegroup ExponentiationPrecedence {
associativity: right
higherThan: MultiplicationPrecedence
}
infix operator ** : ExponentiationPrecedence
func ** (_ base: Double, _ exp: Double) -> Double {
return pow(base, exp)
}
func ** (_ base: Float, _ exp: Float) -> Float {
return pow(base, exp)
}
2.0 ** 3.0 ** 2.0 // 512
(2.0 ** 3.0) ** 2.0 // 64
答案 3 :(得分:5)
我是这样做的:
operator infix ** { associativity left precedence 200 }
func ** (base: Double, power: Double) -> Double {
return exp(log(base) * power)
}
答案 4 :(得分:3)
没有一个,但你有pow
功能。
答案 5 :(得分:1)
与大多数C系列语言一样,没有一种语言。
答案 6 :(得分:1)
如果您对Int
类型的幂运算符特别感兴趣,我不认为现有答案对于大数会特别有效,因为在内存中如何表示浮点数。从Float
转换为Double
或Int
并返回时({{1中的pow
,powf
和powl
函数需要}}模块)you may lose precision。这是Darwin
的精确版本:
Int
请注意,此版本的存储效率不是特别高,并且已针对源代码大小进行了优化。
不会创建中间数组的另一个版本:
let pow = { Array(repeating: $0, count: $1).reduce(1, *) }
答案 7 :(得分:0)
另一种选择是使用NSExpression
let mathExpression = NSExpression(format:"2.5**2.5")
let answer = mathExpression.expressionValue(with: nil, context: nil) as? Double
或
let mathExpression = NSExpression(format:"2**3")
let answer = mathExpression.expressionValue(with: nil, context: nil) as? Int
答案 8 :(得分:0)
Swift 4.2
var n = 1.0
var result = 45 * pow(n, 3) + 20 * pow(n, 2) + 19
print(result)
// 84.0