Operador de exponenciação na Swift

não vejo um operador de exponenciação definido nos operadores aritméticos de base na referência da linguagem Swift.

não existe mesmo nenhum operador predefinido de exponenciação de inteiros ou flutuadores na linguagem?

Author: Moritz, 2014-06-05

6 answers

Não há operador, mas pode usar a função pow assim:

return pow(num, power)

Se quiseres, também podes fazer um operador ligar para a função pow assim:

infix operator ** { associativity left precedence 170 }

func ** (num: Double, power: Double) -> Double{
    return pow(num, power)
}

2.0**2.0 //4.0
 66
Author: Connor, 2014-10-15 10:41:18

Se por acaso estiver a aumentar 2 para alguma potência, pode usar o operador de turno à esquerda bitwise:

let x = 2 << 0    // 2
let y = 2 << 1    // 4
let z = 2 << 7    // 256

Repare que o valor de 'poder' é 1 a menos do que pensa.

Note que isto é mais rápido que pow(2.0, 8.0) e permite-lhe evitar ter de usar duplos.

 18
Author: chanceoperation, 2017-01-13 04:05:40

Para quem procura uma versão 3 rápida do ** Operador de infix:

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
 9
Author: reitermarkus, 2017-01-11 02:19:43

Eu fiz assim:

operator infix ** { associativity left precedence 200 }

func ** (base: Double, power: Double) -> Double {
    return exp(log(base) * power)
}
 6
Author: ldanilek, 2014-07-13 01:13:24

Não há nenhum, mas tu tens a função pow.

 3
Author: Rod, 2014-06-05 16:54:30
Como a maioria da família C de línguas, não há nenhuma.
 1
Author: David Berry, 2014-06-05 16:52:24