Re: [LAU] building a debian system for audio

From: Pieter Palmers <pieterp@email-addr-hidden>
Date: Thu May 24 2007 - 12:15:08 EEST

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
_______________________________________________
Linux-audio-user mailing list
Linux-audio-user@email-addr-hidden
http://lists.linuxaudio.org/mailman/listinfo.cgi/linux-audio-user
Received on Thu May 24 16:15:01 2007

This archive was generated by hypermail 2.1.8 : Thu May 24 2007 - 16:15:01 EEST