"dsimcha" <dsim...@yahoo.com> wrote in message news:i2umov$2es...@digitalmars.com...
== Quote from Fawzi Mohamed (fa...@gmx.ch)'s article
On 29-lug-10, at 15:31, dsimcha wrote:
> == Quote from Fawzi Mohamed (fa...@gmx.ch)'s article
>> otherwise, as I already said http://www.netlib.org/fftpack/fft.c is
>> public domain, has reasonable performance, and supports all sizes.
>> It might not be the always beautiful, but it is stable and works
>> well...
>> Fawzi
>
> Yeah, I just looked at this code.  The problem is that I wouldn't do
> a straight,
> mechanical port to D, I'd D-ify the code a little while I was at it
> (such as
> making it work on generic random access ranges if it's an out of
> place transform,
> making real-only inputs vs. complex inputs DRYer with templates,
> etc.).  Since
> this code seems to have been straight-up translated from FORTRAN, it
> scores about
> a -2 the readability scale, from 1 to 10.  In other words, I would
> probably be
> able to translate it and make it run, but even the slightest
> modification would be
> near impossible.
eheh this must meant that too much fortran inured me, I did not find
the code too bad, I classified it as a typical numerical intensive
code (even rather clean where one can easily find the boundaries of
the arrays, and without too many goto), and templating float, using
slices as input seemed easy.

Yes, but typical numerics intensive code is basically unreadable. I think D is about the only language that has enough high-level stuff (templates, etc.) to write readable numerics code with a nice interface, but is also efficient enough to write efficient numerics code. Unfortunately, we're basically starting from scratch because C and Fortran numerics code is so crufty and unreadable that it's really, really hard to refactor it into readable D or even put a nice interface on it.

But yes probably it is not the best basis to develop your own thing.
Ahrg fortran ruined me ;).
ciao
Fawzi

I got permission from Mark Borgerding to port kissfft and have the binary
attribution clause waived, but unfortunately this code is almost as difficult to read due to its extreme preprocessor abuse. (Basically he implements complex
numbers as a struct with an imaginary and real component and a bunch of
preprocessor macros.) Part of the preprocessor abuse is necessary for supporting fixed point FFTs. Does anyone care about these (I sure don't), or can I just get
rid of them?

Fixed-point FFTs could be important if your number-crunching data that could have been collected by, say, a microcontroller-based system with 16-bit ADCs. Integer-only FFTs are useful.

I'm hoping I can refactor this code into a nice D interface, but it may end up being that I have to basically start from scratch. One thing I will absolutely not do is contribute code without a proper D-style (i.e. templated, works with std.complex, etc.) interface. If I can't understand kissfft well enough to do this refactoring, then maybe I'll just start from scratch using the Wikipedia FFT article and a textbook.

Reply via email to