c++ math fixed-point

Biblioteca de punto fijo C++?



math fixed-point (7)

Estoy buscando una biblioteca gratuita de punto fijo C ++ (Principalmente para usar con dispositivos integrados, no para cálculos de precisión arbitrarios). Básicamente, los requisitos son:

  • Sin sobrecarga de tiempo de ejecución innecesaria: todo lo que se puede hacer en tiempo de compilación, debe hacerse en tiempo de compilación.
  • Posibilidad de cambiar el código de forma transparente entre punto fijo y punto flotante, sin gastos indirectos.
  • Funciones matemáticas de punto fijo. No tiene sentido utilizar un punto fijo si necesita lanzar hacia adelante y hacia atrás para tomar una raíz cuadrada.
  • Pequeña huella de pie.

¿Alguna sugerencia?


Aquí hay una biblioteca de punto fijo de código abierto en GitHub:

https://github.com/mbedded-ninja/MFixedPoint

Admite números de punto fijo de 32 bits y de 64 bits (con un cociente arbitrario) y rápidos (todo está modelado, pero un poco más manual) y números lentos de punto fijo (más automático, pero más lento).

Está orientado a plataformas integradas, sin embargo, lo he usado tanto en microcontroladores como en Linux sin ningún problema.


Consulte las siguientes dos buenas implementaciones sobre el manejo de la representación de puntos fijos en C ++ (no se necesitan libs externas).

  1. Fixed-Point-Class por Peter Schregle. También implementa eficientemente las operaciones básicas como suma , multiplicación y división .

    Ejemplo de código:

    #include <fixed_point.h> using namespace fpml; main() { fixed_point<int, 16> a = 256; fixed_point<int, 16> b = sqrt(a); }

  2. Implementando números de punto fijo en C ++ por Khuram Ali.


Hay un proyecto de biblioteca matemática de punto fijo de código abierto que se puede encontrar siguiendo los enlaces a continuación:

Es una biblioteca C estática con una interfaz de clase C ++ para usuarios de C ++, implementa la siguiente funcionalidad: Trig. Funciones: sin, cos, tan, asin, acos, atan, atan2 Aritmética saturada: sadd, ssub, smul, sdiv Otras funciones: sqrt, exp

Solo es compatible con 16.16 tipos de datos de punto fijo .

Es un proyecto de código abierto desarrollado activamente (en busca de desarrolladores interesados).


Nunca utilicé SPUC , pero la descripción afirma tipos de datos de punto fijo y algunas funciones matemáticas.


Tal vez podrías probar las bibliotecas GMP o MPFR. Estoy bastante seguro de que satisfarán tus necesidades de rendimiento, pero tal vez sean demasiado para tus necesidades y quieras algo más liviano. De todos modos, mira aquí:

Biblioteca GMP

o aquí:

Biblioteca MPFR


Tengo un pequeño encabezado c ++. Puedes encontrarlo en sweet::Fixed . Simplemente defina typedef sweet :: Fixed MyFloat; y usarlo como cualquier otro valor flotante. O cámbialo por el tipo de flotador que quieras más tarde. La clase tiene dos valores de 64 bits. Uno para la parte entera y otra para la fracción.

Tengo un pequeño punto fijo de cabecera de clase c ++ 11 sweet.hpp en sweet.hpp llamado fixed.hpp . Utiliza 32 bits para ambas partes.

typedef float MyFloat; // This will feel the same typedef sweet::Fixed MyFloat; // like this