Fast Fourier transform: Difference between revisions
Content added Content deleted
(→{{header|Common Lisp}}: Adapted to demonstrate CL features (also improving its performance to the O(nlogn) expected of an FFT algorithm)) |
m (→{{header|Common Lisp}}: Deleted a bit of unrelated code) |
||
Line 652: | Line 652: | ||
#C(0.9999999999999999D0 0.4142135623730949D0) #C(0.0D0 0.0D0) |
#C(0.9999999999999999D0 0.4142135623730949D0) #C(0.0D0 0.0D0) |
||
#C(0.9999999999999997D0 2.414213562373095D0)) |
#C(0.9999999999999997D0 2.414213562373095D0)) |
||
=={{header|Crystal}}== |
|||
<lang ruby>def fft(x : Array(Float64)) : Array(Complex) |
|||
return [x[0].to_c] if x.size <= 1 |
|||
even = fft(Array.new(x.size / 2) { |k| x[2 * k] }) |
|||
odd = fft(Array.new(x.size / 2) { |k| x[2 * k + 1] }) |
|||
c = Array.new(x.size / 2) { |k| Complex.new(0, -2 * Math::PI * k / x.size).exp } |
|||
codd = Array.new(x.size / 2) { |k| c[k] * odd[k] } |
|||
return Array.new(x.size / 2) { |k| even[k] + codd[k] } + Array.new(x.size / 2) { |k| even[k] - codd[k] } |
|||
end</lang> |
|||
=={{header|D}}== |
=={{header|D}}== |