Оператор возведения в Swift Я не вижу оператора экспоненциальности, определенного в базовых арифметических операциях в справочной системе Swift. На самом деле не существует предопределенного целочисленного или float-оператора экспоненциального выражения на языке? Ответ 1 Нет оператора, но вы можете использовать функцию 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 Ответ 2 Если вы, возможно, поднимаете 2 до некоторой мощности, вы можете использовать побитовый оператор сдвига влево: let x = 2 << 0 // 2 let y = 2 << 1 // 4 let z = 2 << 7 // 256 Обратите внимание, что значение "power" на 1 меньше, чем вы думаете. Обратите внимание, что это быстрее, чем pow(2.0, 8.0) и позволяет избежать использования удвоений. Ответ 3 Для всех, кто ищет версию операционного индекса ** 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 Ответ 4 Я сделал это так: operator infix ** { associativity left precedence 200 } func ** (base: Double, power: Double) -> Double { return exp(log(base) * power) } Ответ 5 Существует не один, но у вас есть функция pow. Ответ 6 Как и большинство языков C-семейства, их нет.
Ответ 1 Нет оператора, но вы можете использовать функцию 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
Ответ 2 Если вы, возможно, поднимаете 2 до некоторой мощности, вы можете использовать побитовый оператор сдвига влево: let x = 2 << 0 // 2 let y = 2 << 1 // 4 let z = 2 << 7 // 256 Обратите внимание, что значение "power" на 1 меньше, чем вы думаете. Обратите внимание, что это быстрее, чем pow(2.0, 8.0) и позволяет избежать использования удвоений.
Ответ 3 Для всех, кто ищет версию операционного индекса ** 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
Ответ 4 Я сделал это так: operator infix ** { associativity left precedence 200 } func ** (base: Double, power: Double) -> Double { return exp(log(base) * power) }