只是一个练习:
func mySqrt(_ x: Int) -> Int {
if x<2 { return x }
var y = x
var z = (y + (x/y)) / 2
while Double(abs(y - z)) >= 0.00001 {
y = z
z = (y + (x/y)) / 2
}
return z
}
我在StackOverflow中浏览了许多答案,但没有找到更好的解决方案,例如
在ios, Objective C和Swift中计算任何数字平方根的最佳方法
找到平方根而不使用sqrt函数?
输入x = 4或任何完全平方,它工作得很好。现在,以x = 8, It Time out为例。
请告诉我,我做错了什么。
问题是你试图在所有的计算中使用整数。
8的平方根不是整数。您需要对所有变量使用Double
(除了可选地将parameter保留为Int
)。如果你想要一个有意义的答案,返回值需要是一个Double
。
下面是你在需要的地方使用Double
的代码:
func mySqrt(_ x: Int) -> Double {
if x < 2 { return Double(x) }
var y = Double(x)
var z = (y + (Double(x)/y)) / 2
while (abs(y - z)) >= 0.00001 {
y = z
z = (y + (Double(x)/y)) / 2
}
return z
}
print(mySqrt(8))
给出正确的结果。