l i n u x - u s e r s - g r o u p - o f - d a v i s
Next Meeting:
July 7: Social gathering
Next Installfest:
Latest News:
Jun. 14: June LUGOD meeting cancelled
Page last updated:
2007 Nov 30 15:01

The following is an archive of a post made to our 'vox-tech mailing list' by one of its subscribers.

Report this post as spam:

(Enter your email address)
Re: [vox-tech] Fixed point math library for C -- recommendations?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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

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... :)


[*] 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@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
vox-tech mailing list

LUGOD Group on LinkedIn
Sign up for LUGOD event announcements
Your email address:
LUGOD Group on Facebook
'Like' LUGOD on Facebook:

Hosting provided by:
Sunset Systems
Sunset Systems offers preconfigured Linux systems, remote system administration and custom software development.

LUGOD: Linux Users' Group of Davis
PO Box 2082, Davis, CA 95617
Contact Us

LUGOD is a 501(c)7 non-profit organization
based in Davis, California
and serving the Sacramento area.
"Linux" is a trademark of Linus Torvalds.

Sponsored in part by:
O'Reilly and Associates
For numerous book donations.