Messages in this thread | | | Date | Mon, 31 May 2004 16:13:21 +1000 | From | Peter Williams <> | Subject | Re: How to use floating point in a module? |
| |
Ian Kent wrote: > On Sun, 30 May 2004 ndiamond@despammed.com 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@bigpond.net.au
"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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |