【发布时间】:2015-06-30 19:09:38
【问题描述】:
我一直在试图弄清楚如何以编程方式在 Swift 中找到数字的平方根。我正在寻找用尽可能少的代码来完成的最简单的方法。我现在这可能很容易完成,但想不出办法。
【问题讨论】:
标签: swift math square-root
我一直在试图弄清楚如何以编程方式在 Swift 中找到数字的平方根。我正在寻找用尽可能少的代码来完成的最简单的方法。我现在这可能很容易完成,但想不出办法。
【问题讨论】:
标签: swift math square-root
在 Swift 3 中,FloatingPoint 协议似乎有一个 squareRoot() 方法。 Float 和 Double 都符合 FloatingPoint 协议。所以:
let x = 4.0
let y = x.squareRoot()
就是这么简单。
底层生成的代码应该是单个 x86 机器指令,不会跳转到函数的地址然后返回,因为这会转换为中间代码中内置的 LLVM。因此,这应该比调用 C 库的 sqrt 函数更快,这确实是一个函数,而不仅仅是汇编代码的宏。
在 Swift 3 中,您确实不需要需要导入任何东西来完成这项工作。
【讨论】:
请注意,sqrt() 将需要导入以下至少一项:
【讨论】:
第一次导入import UIKit
let result = sqrt(25) // equals to 5
那么你的结果应该在“结果”变量上
【讨论】:
sqrt 函数例如sqrt(4.0)
【讨论】:
这应该适用于任何根, 2 - ∞,但你可能不在乎:
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
}
【讨论】:
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
【讨论】: