只是一个练习:
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中计算任何数字的平方根的最佳方法
Finding square root without using sqrt function?
假设输入x = 4或任何正方形,它都能正常工作。现在,假设x = 8,它超时。
请帮帮我,我到底做错了什么。
1条答案
按热度按时间j2datikz1#
问题是你试图在所有的计算中使用整数。
8的平方根不是整数。您需要对所有变量使用
Double
(除了可选地将参数保留为Int
)。如果您想要有意义的答案,则返回值需要为Double
。下面是在需要时使用
Double
的代码:这将给出正确的结果。