demande d'aide pour operation en virgule fixe - Divers - Programmation
Marsh Posté le 14-03-2008 à 11:00:14
Si tu commences à parler en "bits" au lieu de "chiffres", alors clairement tu travailles pas en virgule fixe.
Justement, les calculs en virgule fixe, on fait abstraction de la représentation binaire et on ne travaille qu'avec une précision fixe, en terme de chiffres.
Ce qui permet de faire ça :
(11.1 / 10) * 10 = 11
Si on travaille en virgule fixe avec un chiffre significatif.
Après, rien ne t'empêche de travailler avec 20 chiffres significatifs en virgule fixe, mais tu sais que tout calcul fait sur ces 20 chiffres sera absolument exact (pas d'approche comme avec le float par exemple) et que tout calcul nécessitant plus de 20 chiffres significatifs sera arrondi afin de ne travailler qu'avec 20 chiffres.
En gros, tu travailles sur un ensemble de valeurs déterminés où chaque valeur est énumérable, et tu ne peux pas sortir de cet ensemble, même pour des calculs intermédiaires.
Imagine simplement que tu travailles uniquement avec des INT, que du divise par une puissance de 10 juste pour l'affichage.
Pour les nombres entiers ça marche tout pareil, c'est juste que tu bosses avec des entiers. Donc 10^99 + 1 <> 10^99 par exemple, ce qui ne sera pas toujours le cas avec une représentation en virgule flottante.
Marsh Posté le 14-03-2008 à 11:18:21
euh sauf que non MagicBuzz :|
Les bits à gauche de la virgule représentent la partie entière du nombre (au vrai sens du terme), c'est-à-dire l'entier se trouvant à gauche de la virgule. Chaque bit à droite de la virgule, ou « décimale binaire », correspond à l'inverse d'une puissance de 2. Ainsi la première décimale binaire est ½, la seconde est ¼, la troisième est 1/8 et ainsi de suite. Pour un nombre en virgule fixe dans un format de complément à deux, la borne maximale est : 2^{e-1}-\frac{1}{2^f} et la borne minimale est − 2e − 1 où e correspond au nombre de bits de la partie entière et f au nombre de bits de la partie fractionnaire.
Donc non, on ne fais pas abstraction de la représentation binaire ... Au contraire ...
Marsh Posté le 14-03-2008 à 15:13:32
Joel F a écrit : euh sauf que non MagicBuzz :| |
ah, désolé
je suis trop pollué par le type "decimal" du SQL, qui bosse par contre en chiffres, sur un nombre de bits variables justement
Marsh Posté le 17-03-2008 à 16:00:29
oublie les miennes, et regarde celles de joel, moi gt à côté de la plaque
Marsh Posté le 17-03-2008 à 16:56:42
strblast >> comme je t'ai TT pour une semaine sur l'autre topic, tu auras le temps de lire ceci
http://forum.hardware.fr/hfr/Progr [...] tm#t537664
Marsh Posté le 17-03-2008 à 17:09:54
Comment c'est limpide ton explication
Par contre, j'ai une question stupide (ouais, je sais, je suis le roi des questions stupides
Imaginons que pour travailler en 3D, j'ai décidé d'utiliser deux types de virgules fixes :
> t1 avec une précision de 8 bits, histoire de localiser les corrodonnées des textures sur mes vertices.
> t2 avec une précision de 16 bits, histoire de localiser mes vertices dans l'espace.
Et maintenant, dans le cadre d'une transformation, je vais avoir besoin de mélanger les calculs des deux types.
Pour faire des calculs hétérogènes, je dois passer mon type le moins précis vers mon type le plus précis avant de faire le calcul non ? Ou si faut faire autrement ?
Question subsidiaire : Maintenant que les processeurs ont tous des FPU, et qu'elles sont devenu très performantes, et que les GPU travaillent aussi en virgule flottante, y a-t-il encore un intérêt particulier à travailler avec ce genre de tricks ? Les calculs/tests supplémentaires nécessaires ne sont-ils du coup pas plus consommateur que de travailler directement en float ? Genre, avec DirectX, maintenant, même pour la 2D, on ne peut travailler qu'en float (sur 32 bits).
Marsh Posté le 17-03-2008 à 21:25:15
dasn le cadre de FPGA ou de System on Chip, c'est interessant car moins couteux en conso electrique
Marsh Posté le 13-03-2008 à 17:44:04
Bonjour,
Question de noob (que je suis ).
1)Lorsque l'on parle de représentation en virgule fixe , c'est uniquement pour des nombres à virgule???
2)Et est-ce que je peux utiliser la methode de représentation en virgule fixe pour le nombre -58.984375(10)?? sachant que l'on reserve 20 bits pour la partie entiere et 12 bits pour la partie fractionnaire.
Par contre pour une complementation à 2, je dois aussi inverser les bits qui sont derriere la virgule?
En vous remerciant par avance de votre aide et de votre comprehension