I have been trying to figure out how to programmatically find a square root of a number in Swift. I am looking for the simplest possible way to accomplish with as little code ne
Note that sqrt() will require the import of at least one of:
this should work for any root, 2 - ∞, but you probably don't care:
func root(input: Double, base: Int = 2) -> Double {
var output = 0.0
var add = 0.0
while add < 16.0 {
while pow(output, base) <= input {
output += pow(10.0, (-1.0 * add))
}
output -= pow(10.0, (-1.0 * add))
add += 1.0
}
return output + 0.0
}
First import import UIKit
let result = sqrt(25) // equals to 5
Then your result should be on the "result" variable
func sqrt(num:Int)-> Double {
var x1:Double = (Double(num) * 1.0) / 2;
var x2:Double = (x1 + (Double(num) / x1)) / 2;
while(abs(x1 - x2) >= 0.0000001){
x1 = x2;
x2 = (x1 + (Double(num) / x1)) / 2;
}
return Double(x2);
}
print(sqrt(num:2))
**output**
1.414
[1]: https://i.stack.imgur.com/SuLPj.png
In Swift 3, the FloatingPoint
protocol appears to have a squareRoot()
method. Both Float
and Double
conform to the FloatingPoint
protocol. So:
let x = 4.0
let y = x.squareRoot()
is about as simple as it gets.
The underlying generated code should be a single x86 machine instruction, no jumping to the address of a function and then returning because this translates to an LLVM built-in in the intermediate code. So, this should be faster than invoking the C library's sqrt
function, which really is a function and not just a macro for assembly code.
In Swift 3, you do not need to import anything to make this work.
sqrt function for example sqrt(4.0)