Je travaille sur un petit projet personnel (ciblant une hélice Parallax, mais cela devrait être assez généralisable) qui nécessite des calculs en virgule flottante.
Le microcontrôleur avec lequel je travaille n'a pas de virgule flottante native ni de bibliothèque de virgule flottante d'origine.
Existe-t-il de bonnes ressources ou des didacticiels sur la mise en œuvre de logiciels mathématiques à virgule flottante? De préférence sur des ressources vraiment limitées (je n'ai même pas de pile!).
Je voudrais supporter double
des flotteurs de taille. L'hélice est un MCU 32 bits, donc je vais devoir utiliser plusieurs variables pour chaque flotteur.
Je sais qu'il existe une bibliothèque de virgule flottante logicielle pour l'hélice, mais elle ne prend en charge que single
des flotteurs de taille.
Non, je n'ai probablement pas vraiment besoin double
de flotteurs de taille, mais cela ressemble à un projet vraiment intéressant. La moitié de la raison pour laquelle je veux le faire est que j'apprendrai beaucoup en cours de route.
la source
Réponses:
Si vous voulez le faire vous-même, je dirais juste le faire.
Je suppose que vous ne trouverez pas trop de ressources ou de tutoriel car il n'y en a pas beaucoup.
Voici un aperçu:
ajout / soustraction:
si les exposants diffèrent trop (plus que la mantisse n'a de bits):
renvoyez simplement la valeur avec un exposant plus grand (si c'est le subtrahend: négation)
si les exposants sont similaires:
décaler la mantisse de plus petite valeur par la différence des exposants et ajouter à / soustraire des autres mantisses (en utilisant l'arithmétique à virgule fixe)
si le résultat n'est pas 0: décaler la mantisse jusqu'à ce que MSBit du résultat soit 1 et décrémenter l'exposant de la même quantité
multiplication / division:
multiplier / diviser les mantisses (en utilisant l'arithmétique à virgule fixe) et ajouter / soustraire des exposants
la source
Vous devriez pouvoir utiliser cette bibliothèque à virgule flottante à précision multiple sur l'hélice, avec Catalina C ou gcc. Cependant, cela peut être trop lent pour de nombreuses applications.
la source
Il semble que cette question a pris la tendance de chercher à comprendre plus qu'à résoudre le problème, donc ce n'est peut-être pas la réponse la plus utile, mais juste pour être complet
http://code.google.com/p/propgcc/wiki/PropGccCompileOptions
Implique que la version hélice de GCC a un support en virgule flottante, y compris les doubles.
GCC et ses bibliothèques de compilation sont bien sûr open source, bien qu'il puisse y avoir une vraie courbe d'apprentissage avant que vous puissiez commencer à voir ce que fait le code.
la source