Re: How to use floating point in a module?

From: Peter Williams
Date: Mon May 31 2004 - 01:14:36 EST


Ian Kent wrote:
On Sun, 30 May 2004 ndiamond@xxxxxxxxxxxxx wrote:


Yes, if we use a real-time Linux and make a daemon cooperate very closely
with the driver.


Maybe you could use lookup tables instead of doing floating point
arithmetic.

You might be right, if the device can only be controlled to position itself
in say 1,000 different ways, then we could have lookup tables for 1,000
different intervals of (emulations of) floating-point numbers, that yield
1,000 different values of sin. Another table for cos, another for log10,
etc. But I'd still have to write my own emulations for binary operators
such as +, /, etc., since a 1,000*1,000 lookup table would be too big.


Why not scaled longs (or bigger), scalled to number of significant digits. The Taylor series for the trig functions might be a painfull.

See the "Handbook of Mathematical Functions" by Abromawitz and Stegun, Dover Publications (ISBN 486-61272-2, Library of Congress number 65-12253) which has some small but accurate polynomial approximations for many functions. I have used these successfully with fixed point rational numbers (FDRN) (which are probably the same as your scaled longs) using 64 bit integers and the results were generally accurate to the least significant bit when compared to values calculated using the normal maths library and converted to FDRN representation.

Of course, the available range of values is smaller than for floats or double and you have to be careful w.r.t. overflow etc.

Peter
--
Dr Peter Williams pwil3058@xxxxxxxxxxxxxx

"Learning, n. The kind of ignorance distinguishing the studious."
-- Ambrose Bierce

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/