[vox-tech] Fixed point math library for C -- recommendations?

Jeff Newmiller jdnewmil at dcn.davis.ca.us
Wed Nov 21 21:19:05 PST 2007


Bill Kendrick wrote:
> A number of areas in Tux Paint rely heavily on floating-point math.
> This is great in terms of the quality of the effects, but makes parts of
> Tux Paint nearly unusable on platforms that lack dedicated FPUs.
> (The Sharp Zaurus PDA and Nokia N770 and 800 internet tablets, for example.)
> 
> Is there a library, or perhaps source-mangling tool, that can convert
> floating math in C program to fixed point?  I'd like to keep the float stuff
> in the main codebase, if at all possible...  both to keep the code
> human-readable, and to continue to take advantage of the real floating point
> math on systems with FPUs.  (Arguably, most systems running Tux Paint, since
> most users are on Windows, Mac OS X and Linux, systems, respectively[*].)
> 
> I'd obviously prefer something common (e.g., in Ubuntu and Debian), so that
> other developers can continue working on Tux Paint with the least fuss... :)
> 
> Thanks!
> 
> [*] From what I can tell from downloads.

I think you are hoping for too much.  Software floating point is not slow
because the coders like it that way... it is tough to do it both right
and fast.  Fixed point math is a completely different animal than
floating point... so it is not possible to drop it in in place of
a floating point library.

To be more specific... fixed point math is really integer math with
specific scaling values (a "binary point" instead of a "decimal point")
for each variable.  Traditionally the scaling gets encoded into the
program each place the variable is used, leaving only integer data
with various bitshifts to keep magnitudes in line.  This can be
implemented with C++ templates to make it easier to do, but it still
isn't interchangeable with real floating point math because the
scaling factors must be declared by the programmer and tested
to avoid overflows or underflows.

If you really want to support non-FPU environments with fixed point
math, I think you will need to rewrite the codebase to never use
floating point.  This will probably result in a speed up on more
powerful hardware as well, but coding will be tougher overall...
very much so if you want to use pure C.

-- 
---------------------------------------------------------------------------
Jeff Newmiller                        The     .....       .....  Go Live...
DCN:<jdnewmil at dcn.davis.ca.us>        Basics: ##.#.       ##.#.  Live Go...
                                       Live:   OO#.. Dead: OO#..  Playing
Research Engineer (Solar/Batteries            O.O#.       #.O#.  with
/Software/Embedded Controllers)               .OO#.       .OO#.  rocks...1k
---------------------------------------------------------------------------


More information about the vox-tech mailing list