大佬教程收集整理的这篇文章主要介绍了swift算法手记-5,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
// // ViewController.swift // learn5 // // Created by myhaspl on 16/1/23. // Copyright (C) 2016年 myhaspl. All rights reserved. // import Cocoa import Foundation class ViewController: NSViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } override var representedObject: AnyObject? { didSet { // update the view,if already loaded. } } private func comresult(inputnum:DoublE)->Double{ // 5*x^7-3*x^5+16*x^2+7*x+90=0 let myresult:Double = 5 * pow(inputnum,7) - 3 * pow(inputnum,5) + 16 * pow(inputnum,2) + 7 * inputnum + 90 return myresult } @IBOutlet weak var result: NSTextField! @IBACtion func compute(sender: AnyObject){ // 5*x^7-3*x^5+16*x^2+7*x+90=0 // 二分法求一元方程的解,最大求解范围[-100000,100000] let trycount = 80 var accuracy: Double = 0.00000000000001 var answer: Double?=nil // 估计解范围 var leftbound:Double?=nil var rightbound:Double?=nil for var bound:Double=1;bound<10000000;bound*=10{ let leftres=comresult(-bound) let rightres=comresult(bound) if (leftres*rightres) < 0 { leftbound = (-bound) rightbound = bound break } } if (leftbound==nil || rightbound==nil){ return } //计算方程的解 for i in 1...trycount{ result.stringvalue=String(i) let center=leftbound!+(rightbound!-leftbound!)/2 let leftres:Double=comresult(leftbound!) let rightres:Double=comresult(rightbound!) let centres:Double=comresult(center) if centres==0 { answer=center break } else if abs(rightbound!-leftbound!) < accuracy { answer=leftbound! break } else if leftres*centres<0{ rightbound=center } else if rightres*centres<0{ leftbound=center } } if let ans=answer{ //方程有解 result.stringvalue="解:"+String(StringInterpolationSegment: ans)+" " result.stringvalue += "解代入方程的值:"+String(StringInterpolationSegment:comresult(ans)) } } }
以上是大佬教程为你收集整理的swift算法手记-5全部内容,希望文章能够帮你解决swift算法手记-5所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。