In [1]:
using Unums

In [2]:
complex(Ubound34(1.1))


Out[2]:
Complex{Unums.Ubound{3,4,UInt64}}
(1.0999908447265625,1.100006103515625) + 0.0*im

In [3]:
# computes the fft coefficient in high precision, then converts back
fftx_coef{T}(::Type{T},k,N) = convert(T,exp(-2*π*im*BigFloat(k)/N)) 

# simple Cooley-Tukey FFT
function fftx(x)
    N = length(x)
    if N == 1
        return x
    else
        y1 = fftx(x[1:2:N-1])
        y2 = fftx(x[2:2:N])
        
        n = length(y1)
        X = similar(x)
        for k = 1:n
            a,b = y1[k], y2[k]
            z = fftx_coef(eltype(x),k-1,N)
            X[k] = a + z * b
            X[n+k] = a - z * b
        end
        return X
    end
end


Out[3]:
fftx (generic function with 1 method)

In [4]:
x = randn(8)
xc = complex(x)
u = map(Ubound34,x)
uc = complex(u)


Out[4]:
8-element Array{Complex{Unums.Ubound{3,4,UInt64}},1}:
    (0.802093505859375,0.8021011352539062)+0.0*im
  (0.4930763244628906,0.49308013916015625)+0.0*im
     (0.55255126953125,0.5525588989257812)+0.0*im
    (0.573211669921875,0.5732192993164062)+0.0*im
  (0.2057971954345703,0.20579910278320312)+0.0*im
  (0.35410308837890625,0.3541069030761719)+0.0*im
  (-0.827728271484375,-0.8277206420898438)+0.0*im
 (-0.9381637573242188,-0.9381561279296875)+0.0*im

In [5]:
fft(x)


Out[5]:
8-element Array{Complex{Float64},1}:
   1.21498+0.0im     
 -0.374135-2.54725im 
   1.28306-1.21213im 
   1.56674+0.213309im
  0.250488+0.0im     
   1.56674-0.213309im
   1.28306+1.21213im 
 -0.374135+2.54725im 

In [6]:
fftx(xc)


Out[6]:
8-element Array{Complex{Float64},1}:
   1.21498+0.0im     
 -0.374135-2.54725im 
   1.28306-1.21213im 
   1.56674+0.213309im
  0.250488+0.0im     
   1.56674-0.213309im
   1.28306+1.21213im 
 -0.374135+2.54725im 

In [7]:
fftx(uc)


Out[7]:
8-element Array{Complex{Unums.Ubound{3,4,UInt64}},1}:
                         (1.214935302734375,1.214996337890625)+0.0*im                                  
 (-0.374176025390625,-0.37407684326171875)+(-2.54730224609375,-2.547149658203125)*im                   
  (1.283050537109375,1.2830963134765625)+(-1.2121429443359375,-1.21209716796875)*im                    
                          (1.5666656494140625,1.5667724609375)+(0.2132415771484375,0.21337890625)*im   
                         (0.250457763671875,0.250518798828125)+0.0*im                                  
       (1.566680908203125,1.5667877197265625)+(-0.21337890625,-0.2132415771484375)*im                  
                          (1.2830352783203125,1.2830810546875)+(1.21209716796875,1.2121429443359375)*im
                      (-0.37418365478515625,-0.37408447265625)+(2.547149658203125,2.54730224609375)*im 

In [ ]: