Skip to content

Instantly share code, notes, and snippets.

@joanmolinas
Created April 11, 2015 12:00
Show Gist options
  • Save joanmolinas/343460800375d91faee6 to your computer and use it in GitHub Desktop.
Save joanmolinas/343460800375d91faee6 to your computer and use it in GitHub Desktop.
/* Two exponentiate algorithms, the first one it's better than second. */
func exponentiate(number : Int, exponent : Int) -> Int {
var n = number, e = exponent, r = 1, v = 0
func descriptionVar() -> String { return "Loop v :\(v), n =\(n), e = \(e), r = \(r)" }
while (e > 0) {
if e%2 != 0 { r = r*n }
e /= 2
n *= n
v++
descriptionVar()
}
return r
}
exponentiate(2, 9) -> 4 loops
//Loop v :1, n =4, e = 4, r = 2
//Loop v :2, n =16, e = 2, r = 2
//Loop v :3, n =256, e = 1, r = 2
//Loop v :4, n =65536, e = 0, r = 512
func exponentiate2(number : Int, exponent : Int) -> Int {
var n = exponent, r = 1
while (n > 0) {
r *= number ;
n--;
}
return r
}
exponentiate2(2, 9) -> 9 Loops
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment