Fast Fourier transform: Difference between revisions

Line 655:
 
=={{header|Crystal}}==
{{trans|Ruby}}
<lang ruby>def fft(x : Array(Float64)) : Array(Complex)
<lang crystal>require "complex"
 
<lang ruby>def fft(x : Array(Int32 | 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).i.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>
fft([1,1,1,1,0,0,0,0]).each{ |c| puts c }
</lang>
{{out}}
<pre>
4.0 + 0.0i
1.0 - 2.414213562373095i
0.0 + 0.0i
1.0 - 0.4142135623730949i
0.0 + 0.0i
0.9999999999999999 + 0.4142135623730949i
0.0 + 0.0i
0.9999999999999997 + 2.414213562373095i
</pre>
 
=={{header|D}}==
Anonymous user