[linux-audio-dev] Fixed vs Floating point comparison.

Roger Larsson roger.larsson at norran.net
Fri Nov 7 07:21:41 UTC 2003


(resent, previously sent from non member account)

First: Is the code correct?

	pos=lrintf(counter);

Shouldn't pos be lower than counter and pos+1 higher? Like this
	pos <= counter < pos+1

	pos = (int)(counter);

=> I use this in my tests.

Second: Why the 'volatile'?
You should never be that timing sensitive that it makes a difference...
(let the producer enter an interrupt and...)

Third: Compilators hates pointers and loves arrays - strange ehh..
Modified the code to this, note the added loop counter.

    int ix;
    for (ix = 0; ix < todo; ix++) {

	pos=(int)(counter);
        counter+=advance_f;

	res = src_ptr[pos];
	res_next = src_ptr[pos+1];
	res += (res_next-res) * (counter-(float)pos);
	res *= volume_f;

        dst_ptr[ix] +=res;
    }


Results:

PIII 933 MHz	volatile	non volatile
pointer dst		5.0 s		4.9 s
array dst		4.5 s		4.1 s

/RogerL

-- 
Roger Larsson
Skellefteå
Sweden





More information about the Linux-audio-dev mailing list