Подтвердить что ты не робот

Оператор возведения в Swift

Я не вижу оператора экспоненциальности, определенного в базовых арифметических операциях в справочной системе Swift.

На самом деле не существует предопределенного целочисленного или float-оператора экспоненциального выражения на языке?

4b9b3361

Ответ 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-семейства, их нет.