Re: [LAU] building a debian system for audio

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

 



On Wed, May 23, 2007 at 06:46:45PM -0500, Jack O'Quin wrote:

> On 5/23/07, Fons Adriaensen <fons@xxxxxxxxxxxxxxx> wrote:

> >What is even more scary is this: adding a extra printf() _after_ all
> >the calculations and _after_ a number of other printf() that I have
> >been using to see what is happening is enough to remove the error -
> >it modifies the values printed by the previous printf()...
> >I'm now pretty sure this is the optimiser having an identity
> >crisis...
> 
> Arrgh!  Put it in a separate function to defeat the optimizer?

Yes, that works, even if inlined.

Meanwhile I've found out what happened. The problem was not with
the float to int conversion, but with the FP calculation itself.

In one case, an intermediate value was stored to memory and
re-used from the stored value. In the second the register value
was used. A FP register has higher precision than a 32-bit FP in
memory, so storing it to memory requires rounding. And rounding
can change even the integer part in some rare cases.

Having both a register and a memory copy of the same variable
can produce very strange results, e.g.

    float v;
       v = // some calculation
       printf ("v = %12.9lf  %08x\n", v, *((int *)(&v)));

can print either

  v = 29.990000000  41efeb85 

or

  v = 29.989999771  41efeb85 

depending on the context.

In the second line printf() uses the register value for the first
field, in the first the one stored in the variable v. It just depends
on what the optimiser prefers. The hex format always uses the value
stored in v. 


-- 
FA

Follie! Follie! Delirio vano è questo !


_______________________________________________
Linux-audio-user mailing list
Linux-audio-user@xxxxxxxxxxxxxxxxxxxx
http://lists.linuxaudio.org/mailman/listinfo.cgi/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