我已经尝试了以下方法,但是却使我难受
func sin (x: Double) -> Void {
var z = 1000
var n = 1.0
var w = 0.0
var b = (2*n-1)+1
var c = 0.0
while (b > 2){
c *= (b-1)
b -= 1
}
while (z > 0){
w += (power(x:(-1), y:(n-1))*(power(x:x, y:(2*n-1)))/c)
z -= 1
n += 1
}
print(w)
} where
power(x:base, y: exponent)
示例:
func sin(_ x: Double) -> Double {
func factorial(_ number: Int) -> Int {
var result = 1
for i in 2...number {
result *= i
}
return result
}
let x2 = x * x
let x4 = x2 * x2
let t1 = x * (1.0 - x2 / Double(factorial(3)))
let x5 = x4 * x
let t2 = x5 * (1.0 - x2 / (6 * 7)) / Double(factorial(5))
let x9 = x5 * x4
let t3 = x9 * (1.0 - x2 / (10 * 11)) / Double(factorial(9))
let x13 = x9 * x4
let t4 = x13 * (1.0 - x2 / (14 * 15)) / Double(factorial(13))
let result = t1 + t2 + t3 + t4
return round(1000 * result) / 1000
}
用法:
let test = sin(90 * Double.pi / 180) // 90 degrees
print(test) // 1.0