【问题标题】:Easiest way to find Square Root in Swift?在 Swift 中找到平方根的最简单方法是什么?
【发布时间】:2015-06-30 19:09:38
【问题描述】:

我一直在试图弄清楚如何以编程方式在 Swift 中找到数字的平方根。我正在寻找用尽可能少的代码来完成的最简单的方法。我现在这可能很容易完成,但想不出办法。

【问题讨论】:

标签: swift math square-root


【解决方案1】:

在 Swift 3 中,FloatingPoint 协议似乎有一个 squareRoot() 方法。 FloatDouble 都符合 FloatingPoint 协议。所以:

let x = 4.0
let y = x.squareRoot()

就是这么简单。

底层生成的代码应该是单个 x86 机器指令,不会跳转到函数的地址然后返回,因为这会转换为中间代码中内置的 LLVM。因此,这应该比调用 C 库的 sqrt 函数更快,这确实是一个函数,而不仅仅是汇编代码的宏。

在 Swift 3 中,您确实不需要需要导入任何东西来完成这项工作。

【讨论】:

  • UIKit sqrt(双)
  • 我喜欢这个解决方案,因为它不需要任何导入! ??
【解决方案2】:

请注意,sqrt() 将需要导入以下至少一项:

  • UIKit
  • 可可
    • 您可以只导入 Darwin 而不是完整的 Cocoa
  • 基础

【讨论】:

    【解决方案3】:

    第一次导入import UIKit

    let result = sqrt(25) // equals to 5
    

    那么你的结果应该在“结果”变量上

    【讨论】:

    • 虽然此代码可能会回答问题,但提供有关 如何 和/或 为什么 解决问题的附加上下文将改善答案的长期性价值。
    【解决方案4】:

    sqrt 函数例如sqrt(4.0)

    【讨论】:

      【解决方案5】:

      这应该适用于任何根, 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
      }
      

      【讨论】:

      【解决方案6】:
      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
      

      【讨论】:

      • 您能解释一下为什么以及如何找到平方根吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-22
      • 1970-01-01
      • 2016-09-04
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多