libfixmath

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search
libfixmath
DeveloperBen Brewer
Stable release
r64 / February 2, 2012; 14 years ago (2012-02-02)
Repository
  • {{URL|example.com|optional display text}}Lua error in Module:EditAtWikidata at line 29: attempt to index field 'wikibase' (a nil value).
Written inC99
Engine
    Lua error in Module:EditAtWikidata at line 29: attempt to index field 'wikibase' (a nil value).
    Operating systemCross-platform
    Typefixed-point math library
    LicenseMIT

    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

    [edit | edit source]

    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

    [edit | edit source]
    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 | edit source]
    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 | edit source]

    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 | edit source]

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

    See also

    [edit | edit source]

    Lua error in mw.title.lua at line 392: bad argument #2 to 'title.new' (unrecognized namespace name 'Portal').

    References

    [edit | edit source]
    1. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    2. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    3. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    4. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    5. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    [edit | edit source]