[LAU] building a debian system for audio

Pieter Palmers pieterp at joow.be
Thu May 24 05:15:08 EDT 2007


Fons Adriaensen wrote:
> On Wed, May 23, 2007 at 03:25:26PM -0400, Paul Davis wrote:
> 
>> I am very disappointed to hear that the Debian package is using
>> SYSLIBS=1.
> 
> This gives me two occasions to show my ignorance instead of just
> the one I was going to post :-)
> 
> 1. What does SYSLIBS=1 imply ?
> 
> 2. (Original reason for this post)
> 
> I've been chasing a bug for hours this afternoon, and the conclusion 
> is that apparently g++, under some conditions, is not consistent
> in the way it rounds floats to ints in a expression such as
> 
> float  a, b, x;
> int    y;
> 
>    y = (int)((x - a) * b + 0.5f);
> 
> I have this calculation twice, in the same source file. In one
> case it's within a for loop, in the second case it's just a single
> calculation. Both use exactly the same values for a, b, and x, yet
> the result is different (by 1). The value before the cast its something
> like 115.50424, and that gets rounded up in one case and down in the
> other.
> 
> This is with -O3. Same with -O2, -O1, but OK without optimisation, and
> also OK if I use -O3 -march=pentium4.

Probably pointing out something obvious:

If you do -march=pentium4 the compiler uses a specific ASM opcode (I 
forgot which one) to do the conversion, otherwise it generates some very 
inefficient code. Actually specifying -march=pentium is already enough 
for this.

The question is: is the behavior still within the spec? If so, there is 
nothing wrong. Although it would be nice to have some predictability, 
with floats that seems to be somewhat dubious. But I don't know the spec 
details, so maybe I should shut up...

Pieter



More information about the Linux-audio-user mailing list