Fast Fourier transform: Difference between revisions

[Swift] Clean up print. Misc code changes
(Add Swift)
([Swift] Clean up print. Misc code changes)
Line 3,302:
}
 
public var pretty: String {
let real2fmt = real != -0 ? real{ String(format: 0"%1.3f", $0) }
let imagre = imaginary != -0 ? imaginary : 0.0fmt(real)
let fmtim = { Stringfmt(format: "%.3f", $0abs(imaginary)) }
 
letif resultim == "0.000" {
return resultre
(imag >= 0 ? "\(fmt(real2)) + \(fmt(imag))i" : "\(fmt(real2)) - \(fmt(-imag))i")
} else if re .replacingOccurrences(of:== "0.0 000", with: " "){
return im
.replacingOccurrences(of: ".0i", with: "i")
} else if imaginary > 0 {
.replacingOccurrences(of: " + 0i", with: "")
return re + " + " + im + "i"
 
if result.hasPrefix("0 ") {
return result
.replacingOccurrences(of: "0 ", with: "")
.replacingOccurrences(of: " ", with: "")
} else {
return resultre + " - " + im + "i"
}
}
Line 3,336 ⟶ 3,332:
precondition(n % 2 == 0, "The Cooley-Tukey FFT algorithm only works when the length of the input is even.")
 
var (evens, odds) = arr.lazy.enumerated().reduce(into: ([Complex](), [Complex]()), {res, cur in
if icur.offset & 1 == 10 {
var odds = [Complex]()
oddsres.0.append(arr[i]cur.element)
 
for i in 0..<n {
if i & 1 == 1 {
odds.append(arr[i])
} else {
evensres.1.append(arr[i]cur.element)
}
})
 
evens = _fft(evens, direction: direction, scalar: scalar)
odds = _fft(odds, direction: direction, scalar: scalar)
 
let pairs(left, right) = (0 ..< n / 2).map({i -> (Complex, Complex) in
let offset = (direction * Complex((.pi * Double(i) / Double(n)), 0)).exp * odds[i] / cScalar
let base = evens[i] / cScalar
 
return (base + offset, base - offset)
}).reduce(into: ([Complex](), [Complex]()), {res, cur in
leftres.0.append(lcur.0)
rightres.1.append(rcur.1)
})
}
 
var left = [Complex]()
var right = [Complex]()
 
for (l, r) in pairs {
left.append(l)
right.append(r)
}
 
return left + right
}
Line 3,376 ⟶ 3,364:
{{out}}
 
<pre>["4.000 + 2.000i", "2.414 + 1.000i", "-2.000 + 0.000i", "2.414 + 1.828i", "02.000 - 2.000i", "-0.414 + 1.000i", "2.000 - 0.000i", "-0.414 - 3.828i"]
["1.000 + 0.000i", "1.000 + 0.000i", "1.000 + 0.000i", "1.000 + 0.000i", "0.000 + 0.000i", "02.000 + 2.000i", "0.000 - 0.000i", "0.000 + 0.000i"]</pre>
 
=={{header|SystemVerilog}}==