Re: OT(ish): Strange coding problem (audio related)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On Fri, 28 Jan 2011, Philipp Ãberbacher wrote:

Thanks Peter, this section was supposed to refer to the output of the
test program. cout printed 11 for both values but 4.80518e-16 for one
value minus the other, so this at least a very nasty inconsistency.

I still don't understand why this results in 11 on some machines and
something else on others. 32/64 bit? Compiler differences? Luck?

Truncation error related to (a) how the compiler ordered the operations and (b) the log() implementation. I also noticed if you assign `double iters = log(N)/log(2.0)` that `k < iters` works as expected on my machine.

But the thing is, he violated one of the priciples taught in Programming 101: floating point comparisons are dangerous!

   Why can't log mean the same thing everywhere? Why does it need to be

AFAIK, nearly every programming language is consistent that log() is the natural log and log10() is the common log. This only conflicts with normal mathematical notation.

However, in the case of log(N)/log(2.0)... it doesn't matter if it's log-e, log-10, log-2, log-666.... the answer is the same. This is a well-known formula to calculate the number of bits required to represent N.

The next obvious question is: Does the inaccuracy reliably result in
values bigger than 11?

I like Peter Nelson's solution to do (1<<k) and skip log() alltogether.

-gabriel
_______________________________________________
Linux-audio-user mailing list
Linux-audio-user@xxxxxxxxxxxxxxxxxxxx
http://lists.linuxaudio.org/listinfo/linux-audio-user

[Index of Archives]     [Linux Sound]     [ALSA Users]     [Pulse Audio]     [ALSA Devel]     [Sox Users]     [Linux Media]     [Kernel]     [Photo Sharing]     [Gimp]     [Yosemite News]     [Linux Media]

  Powered by Linux