Libreria a punto fisso C ++?

Sto cercando una libreria di punti fissi C ++ gratuita (principalmente per l’uso con dispositivi embedded, non per matematica di precisione arbitraria). Fondamentalmente, i requisiti sono:

  • Nessun sovraccarico di runtime non necessario: tutto ciò che può essere fatto in fase di compilazione, dovrebbe essere fatto in fase di compilazione.
  • Possibilità di cambiare in modo trasparente il codice tra fisso e virgola mobile, senza sovraccarico inerente.
  • Funzioni matematiche a punti fissi. Non c’è molto punto usando il punto fisso se hai bisogno di lanciare avanti e indietro per prendere una radice quadrata.
  • Piccola impronta.

Eventuali suggerimenti?

C’è un progetto di biblioteca matematica a punti fissi open source che può essere trovato seguendo i collegamenti seguenti:

  • Pagina del Progetto libfixmath
  • Libfixmath Articolo di Wikipedia

È una libreria statica C con un’interfaccia di class C ++ per utenti C ++, implementa le seguenti funzionalità: Trig. Funzioni: sin, cos, tan, asin, acos, atan, atan2 Aritmetica saturi: sadd, ssub, smul, sdiv Altre funzioni: sqrt, exp

Supporta solo 16.16 datatype a virgola fissa .

È un progetto open source triggersmente sviluppato (in cerca di sviluppatori interessati).

Scopri le seguenti due buone implementazioni sulla gestione della rappresentazione a virgola fissa in C ++ (non sono necessarie librerie esterne).

  1. Classe a punto fisso di Peter Schregle. Implementa anche efficientemente le operazioni di base come addizione , moltiplicazione e divisione .

    Esempio di codice:

    #include  using namespace fpml; main() { fixed_point a = 256; fixed_point b = sqrt(a); } 
  2. Implementazione di numeri a virgola fissa in C ++ di Khuram Ali.

Ho una piccola intestazione c ++. Lo puoi trovare sotto dolce :: Risolto . Basta definire typedef sweet :: Fixed MyFloat; e usarlo come qualsiasi altro valore float. O scambiarlo con qualsiasi tipo di float che desideri in seguito. La class ha due valori a 64 bit. Uno per la parte intera e avanti per la frazione.

Ho un piccolo implector di intestazione di class c ++ 11 in sweet.hpp chiamato fixed.hpp . Usa 32 bit per entrambe le parti.

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

Ecco una libreria a virgola fissa open source su GitHub:

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

Supporta numeri a virgola fissa a 32 e 64 bit (con un quoziente arbitrario) ed entrambi veloci (tutto è un modello, ma un po ‘più manuale) e numeri a virgola fissa lenti (più automatici, ma più lenti).

È orientato verso piattaforms embedded, tuttavia l’ho usato su entrambi i microcontrollori e Linux senza problemi.

Forse potresti provare le librerie GMP o MPFR. Sono abbastanza sicuro che soddisferanno le tue esigenze in termini di prestazioni, ma forse sono troppo per le tue esigenze e desideri qualcosa di più leggero. Ad ogni modo, guarda qui:

Libreria GMP

o qui:

Libreria MPFR

Non ho mai usato SPUC , ma la descrizione richiede tipi di dati a virgola fissa e alcune funzioni matematiche.