Libfixmath Explained

libfixmath
Developer:Ben Brewer
Latest Release Version:r64
Programming Language:C99
Operating System:Cross-platform
Genre:fixed-point math library
License:MIT

libfixmath is a platform-independent fixed-point math library aimed at developers wanting to perform fast non-integer math 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

libfixmath was developed by Ben Brewer 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

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

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

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

Name Time Compared to Float
26.3%
Marvell PXA270 (ARM) @ 312 MHz 58.45%
120%
141%
Note: These results were calculated using fixtest with caching optimizations turned off.[5]

Licensing

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

See also

External links

Notes and References

  1. Web site: libfixmath Project Page.
  2. Web site: 64-bit Compiler Support Issues.
  3. Web site: Dingoo SDK Project Page.
  4. Web site: FGL Flatmush/Fixed-Point Graphics Library Project Page.
  5. Web site: fixtest Download Page.