Fast Fourier transform: Difference between revisions

→‎{{header|Ruby}}: Added Ruby entry.
m (→‎{{header|REXX}}: changed comment about the pi function result (used as a maximal value for DIGITS). -- ~~~~)
(→‎{{header|Ruby}}: Added Ruby entry.)
Line 1,203:
FFT out 8 1 2.4142136j
</pre>
 
=={{header|Ruby}}==
<lang ruby>def fft(vec)
return vec if vec.size <= 1
evens_odds = vec.partition.with_index{|_,i| i.even?}
evens, odds = evens_odds.map{|even_odd| fft(even_odd)*2}
evens.zip(odds).map.with_index do |(even, odd),i|
even + odd * Math::E ** Complex(0, 2 * Math::PI * (-i)/ vec.size)
end
end
 
fft([1,1,1,1,0,0,0,0]).each{|c| p c}
</lang>
{{Output}}
<pre>
(4+0i)
(1.0-2.414213562373095i)
(-1.2246467991473532e-16-1.2246467991473532e-16i)
(1.0-0.4142135623730949i)
(0.0-2.4492935982947064e-16i)
(0.9999999999999998+0.41421356237309515i)
(1.2246467991473532e-16-1.224646799147353e-16i)
(0.9999999999999993+2.414213562373095i)
</pre>
 
 
=={{header|Run BASIC}}==
1,149

edits