web-dev-qa-db-fra.com

Bibliothèque de points fixes C ++?

Je recherche une bibliothèque de points fixes C++ gratuite (principalement pour une utilisation avec des périphériques intégrés, pas pour des calculs de précision arbitraires). Fondamentalement, les exigences sont les suivantes:

  • Pas de surcharge d'exécution inutile: tout ce qui peut être fait au moment de la compilation, doit être fait au moment de la compilation.
  • Possibilité de basculer le code de manière transparente entre virgule fixe et virgule flottante, sans surcharge inhérente.
  • Fonctions mathématiques à virgule fixe. Il n'y a pas grand-chose à utiliser un point fixe si vous avez besoin de faire des allers-retours pour prendre une racine carrée.
  • Petite empreinte.

Aucune suggestion?

52
uj2

Il existe un projet de bibliothèque mathématique à point fixe open source qui peut être trouvé en suivant les liens ci-dessous:

Il s'agit d'une bibliothèque statique C avec une interface de classe C++ pour les utilisateurs C++, elle implémente les fonctionnalités suivantes: Trig. Fonctions: sin, cos, tan, asin, acos, atan, atan2 Arithmétique saturée: sadd, ssub, smul, sdiv Autres fonctions: sqrt, exp

Il ne prend en charge que type de données à virgule fixe 16.16 .

Il s'agit d'un projet open source activement développé (à la recherche de développeurs intéressés).

6
flatmush

Découvrez les deux bonnes implémentations suivantes sur la gestion de la représentation en virgule fixe en C++ (aucune bibliothèque externe n'est nécessaire).

  1. Fixed-Point-Class par Peter Schregle. Il implémente également efficacement les opérations de base comme l'addition , la multiplication , et division .

    Exemple de code:

    #include <fixed_point.h>
    using namespace fpml;
    
    main()
    {
        fixed_point<int, 16> a = 256;
        fixed_point<int, 16> b = sqrt(a);
    }
    
  2. Implémentation de nombres à virgule fixe en C++ par Khuram ALi.

5
herohuyongtao

Voici une bibliothèque open source à virgule fixe sur GitHub:

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

Il prend en charge les nombres à virgule fixe 32 bits et 64 bits (avec un quotient arbitraire) et à la fois rapides (tout est basé sur des modèles, mais un peu plus manuel) et lents (virgules fixes) (plus automatiques, mais plus lents).

Il est orienté vers les plates-formes embarquées, mais je l'ai utilisé sur les microcontrôleurs et Linux sans aucun problème.

2
gbmhunter

J'ai un joli petit en-tête c ++. Vous pouvez le trouver sous sweet :: Fixed . Définissez simplement typedef sweet :: Fixed MyFloat; et l'utiliser comme toute autre valeur flottante. Ou échangez-le plus tard quel que soit le type de flotteur que vous souhaitez. La classe a deux valeurs 64 bits. Un pour la partie entière et pour la fraction.

J'ai un petit en-tête de classe de point fixe c ++ 11 dans sweet.hpp appelé fixed.hpp . Il utilise 32 bits pour les deux parties.

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

Je vais essayer http://www.efgh.com/software/fixed.htm minuscule lib ...

1
Stef