Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 11/08/2011, à 15:23

gilbert

[C] petite question de culture sur les types..

Bonjour tout le monde,

voilà, je me posais la question suivante : Comment peut-ton manipuler des nombres décimaux à virgule fixe en C standard?

Imaginons que l'on travaille sur un processeur qui dispose d'une fixed point unit mais pas de floating point unit (ceci pour économiser de la surface de silicium par exemple, ou tout autre raison...)

Si l'on souhaite programmer en C sur ce processeur, on pourra définir des variables de type float, mais à la compilation les opérations sur ces variables seront traduites par toute une suite d'instructions qui font que le calcul risque d'être lent (j'entends par là plus d'une instruction machine pour réaliser une addition ou une multiplication par exemple).

Hors, si le processeur a une unité à point fixe disponible, ça ne prendrait qu'une instruction pour réaliser ladite addition. (je ne parle pas ici de la précision du résultat, ça n'est pas la question).

Enfin le C standard permet de travailler directement avec des variables de type entier (signé ou non, et de magnitude différentes) ainsi que flottants avec là aussi plusieurs variantes, mais qu'en est-il pour les points-fixe ?

Merci d'avance pour vos éclaircissements.


Simplement moi-même..

Hors ligne

#2 Le 11/08/2011, à 15:54

VoucyusDo

Re : [C] petite question de culture sur les types..

gilbert a écrit :

Hors, si le processeur a une unité à point fixe disponible, ça ne prendrait qu'une instruction pour réaliser ladite addition. (je ne parle pas ici de la précision du résultat, ça n'est pas la question).

Si ton CPU possède des instructions spécifiques et que ton compilateur permet d'optimiser pour cette architecture, il est probable qu'il choisisse lui même d'utiliser les bonnes instructions au bon moment.
Sinon tu peux toujours réaliser ça en assembleur inline pour peu que tu dispose d'un assembleur compatible avec le jeu d'instruction de ton processeur.

Avec la deuxième solution, la portabilité de ton code n'est plus assurée. Ca signifie qu'on ne pourra pas compiler ton code sur pour un autre processeur que celui gérant ces instructions spécifiques. Avec la première solution, la portabilité est préservée: la compilation pour un processeur ne gérant pas ces instructions fonctionnera mais le compilateur devra reproduire le calcul avec les instructions disponibles et sera donc moins performant.


Sent from my Ubuntu box

Hors ligne

#3 Le 11/08/2011, à 17:33

grim7reaper

Re : [C] petite question de culture sur les types..

Salut,

gilbert a écrit :

Enfin le C standard permet de travailler directement avec des variables de type entier (signé ou non, et de magnitude différentes) ainsi que flottants avec là aussi plusieurs variantes, mais qu'en est-il pour les points-fixe ?

Rien, nada, zéro, néant, …
Le standard du C n’impose pas le complément à deux en tant que représentation des entiers relatifs (ce qui d’ailleurs rend invalide pas mal de hack que j’ai déjà croisé…), donc ce n’est pas choquant qu’il ne gère pas les diverses représentations des nombres flottants.
En conséquence il n’y a rien de standard pour représenter et manipuler de tels nombres. Donc soit tu utilises une bibliothèque existante, soit tu codes ce dont tu as besoin.

Hors ligne

#4 Le 11/08/2011, à 21:40

gilbert

Re : [C] petite question de culture sur les types..

hello,

merci bien pour ces réponses smile Elles ne me surprennent pas trop en fait... c'est ce que je m'attendais à lire même si j'espérais autre chose.

En fait si on veut porter linux sur un SoC, on risque de croiser pas mal de problèmes et la tâche n'a rien d'aisé.

Je pensais à cela en fait aux Linux sur OMAP : http://focus.ti.com/general/docs/wtbu/w … entId=4752

Si on développe des applications spécifiques, il y a de fortes chances qu'elles soient totalement incompatibles avec du Linux conventionnel.


Simplement moi-même..

Hors ligne