libfixmath

From Wikipedia, the free encyclopedia
Jump to: navigation, search
libfixmath
Developer(s) Ben Brewer (aka flatmush)
Stable release r64 / February 2, 2012; 2 years ago (2012-02-02)
Development status active
Written in C99
Operating system Cross-platform
Type fixed point math library
License MIT
Website http://code.google.com/p/libfixmath

libfixmath is a platform-independent fixed point maths library aimed at developers wanting to perform fast non-integer maths on platforms lacking a (or with a low performance) FPU. It offers developers a similar interface to the standard math.h functions for use on Q16.16 fixed point numbers. libfixmath has no external dependencies other than stdint.h and a compiler which supports 64-bit integer arithmetic (such as GCC).[1] Conditional compilation options exist to remove the requirement for a 64-bit capable compiler as many compilers for microcontrollers and DSPs do not support 64-bit arithmetic.[2]

History[edit]

libfixmath was originally developed by Ben Brewer (aka flatmush) and first released publicly as part of the Dingoo SDK.[3] It has since been used to implement a software 3D graphics library called FGL.[4]

Q16.16 Functions[edit]

Name Description
fix16_acos inverse cosine
fix16_asin inverse sine
fix16_atan one-parameter inverse tangent
fix16_atan2 two-parameter inverse tangent
fix16_cos cosine
fix16_exp exponential function
fix16_sin sine
fix16_sqrt square root
fix16_tan tangent
fix16_mul multiplication
fix16_div division
fix16_sadd saturated addition
fix16_smul saturated multiplication
fix16_sdiv saturated division

Other Functions[edit]

Name Description
fix16_to_dbl Convert Q16.16 to a double
fix16_to_float Convert Q16.16 to a float
fix16_to_int Convert Q16.16 to an integer
fix16_from_dbl Convert double to a Q16.16
fix16_from_float Convert float to a Q16.16
fix16_from_int Convert integer to a Q16.16

Performance[edit]

For the most intensive function (atan2) benchmark results show the following results:

Name Time Compared to Float
ARM Cortex-M0 26.3%
Marvell PXA270 (ARM) @ 312 MHz 58.45%
Intel T5500 120%
Intel Atom N280 141%

Note: These results were calculated using fixtest with caching optimizations turned off.[5]

Licensing[edit]

libfixmath is released under the MIT License, a permissive free software licence, and is free software.

See also[edit]

References[edit]

External links[edit]