如何在Swift语言中不使用内置函数计算整数的平方根?我尝试了以下代码并进行了搜索,但没有得到更好的解决方案

pu82cl6c  于 2022-11-21  发布在  Swift
关注(0)|答案(1)|浏览(82)

只是一个练习:

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,它超时。
请帮帮我,我到底做错了什么。

j2datikz

j2datikz1#

问题是你试图在所有的计算中使用整数。
8的平方根不是整数。您需要对所有变量使用Double(除了可选地将参数保留为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))

这将给出正确的结果。

相关问题