52 votes

Bibliothèque à virgule fixe C++ ?

Je suis à la recherche d'une bibliothèque C++ gratuite en virgule fixe (principalement pour une utilisation avec des dispositifs embarqués, pas pour des mathématiques de précision arbitraire). En gros, les exigences sont les suivantes :

  • Pas de surcharge inutile au moment de l'exécution : tout ce qui peut être fait au moment de la compilation doit être fait au moment de la compilation.
  • Possibilité de basculer de manière transparente le code entre la virgule fixe et la virgule flottante, sans surcharge inhérente.
  • Fonctions mathématiques à point fixe. Il est inutile d'utiliser la virgule fixe si vous devez faire des allers-retours pour prendre une racine carrée.
  • Faible encombrement.

Des suggestions ?

8voto

kotlinski Points 12815

Je pense que celui-ci est assez bon pour la plupart des usages : http://www.trenki.net/content/view/17/1/

Il est assez léger et rapide et supporte quelques mathématiques de base (multiplication, division, inversion, sin, cos, sqrt, rsqrt).

6voto

flatmush Points 101

Il existe un projet de bibliothèque mathématique à point fixe à code source ouvert que vous pouvez trouver en suivant les liens ci-dessous :

Il s'agit d'une bibliothèque statique C avec une interface de classe C++ pour les utilisateurs de 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 s'agit d'un projet open-source activement développé (à la recherche de développeurs intéressés).

5voto

herohuyongtao Points 13552

Consultez les deux bonnes implémentations suivantes pour gérer la représentation en virgule fixe en C++ (aucune librairie externe n'est nécessaire).

  1. Classe à points fixes par Peter Schregle. Il met également en œuvre de manière efficace les opérations de base telles que ajout , 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 des nombres à virgule fixe en C++ par Khuram Ali.

1voto

Stef Points 1072

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

1voto

burner Points 213

J'ai un joli petit en-tête c++. Vous pouvez le trouver sous doux::Fixe . Définissez simplement typedef sweet::Fixed MyFloat ; et utilisez-le comme toute autre valeur flottante. Ou échangez-la contre le type de flottant que vous voulez plus tard. La classe a deux valeurs de 64 bits. Une pour la partie entière et une pour la fraction.

J'ai une petite implémentation d'en-tête de classe à virgule fixe en c++11. doux.hpp appelé fixed.hpp . Il utilise 32bit pour les deux parties.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X