Accélérer les calculs avec un float
Fermé
Xavier59
-
18 oct. 2014 à 21:08
nicocorico Messages postés 799 Date d'inscription dimanche 19 juin 2011 Statut Membre Dernière intervention 3 juillet 2018 - 21 oct. 2014 à 09:55
nicocorico Messages postés 799 Date d'inscription dimanche 19 juin 2011 Statut Membre Dernière intervention 3 juillet 2018 - 21 oct. 2014 à 09:55
A voir également:
- Accélérer les calculs avec un float
- Accelerer windows 10 - Guide
- Accelerer une video - Guide
- Accélérer android - Guide
- Accélérer pc gratuit - Accueil - Utilitaires
- Barbara veut calculer automatiquement son budget dans un tableau. citez un des logiciels lui permettant de faire des calculs sur des tableaux de nombres (tableur). - Forum Musique / Radio / Clip
1 réponse
nicocorico
Messages postés
799
Date d'inscription
dimanche 19 juin 2011
Statut
Membre
Dernière intervention
3 juillet 2018
138
Modifié par nicocorico le 18/10/2014 à 21:51
Modifié par nicocorico le 18/10/2014 à 21:51
Bonjour,
Hé bien, les variables à virgule flottante tiennent leur nom du fait que la virgule est placée de manière à optimiser la précision selon que l'on stocke un nombre élevé ou non, c'est à dire que plus le nombre est faible, plus on garde d'espace pour la précision après la virgule, et donc la virgule est flottante afin d'opter pour le meilleur compromis à chaque évolution de la valeur.
Une variable à virgule fixe est bien plus simple finalement, puisqu'on se contente d'aménager un espace fixe permettant d'accueillir une certaine précision après la virgule.
Et pour ça il suffit de multiplier par un nombre choisi en fonction de certains compromis, par 256 par exemple. Ainsi, on perd 8 bits dans la possibilité de grandeur du nombre, mais on aménage une virgule sur 8bits...
Par exemple 1.25*256 donne 320, ensuite on peut faire des opérations sur cette valeur, tout en conservant le 0.25 dans les 8 bits de la virgule, et il suffit de diviser par 256 pour retrouver la partie entière du nombre...
L'intérêt de fonctionner avec un exposant 2 (256), plutôt que 1000 par exemple, c'est que le programme sera bien plus efficace ainsi, puisque les instructions permettant de multiplier ou diviser par des exposants 2 sont infiniment plus rapides qu'en décimal. De plus, on peut récupérer la virgule simplement en lisant les 8 premiers bits de la valeur, tandis qu'en décimal le modulo est obligatoire.
Et je m'interroge sur le matériel dont tu disposes! Ou bien, il faut que tu saches qu'il existe différentes tailles de variables à virgule flottante, plus ou moins longues à la tâche! Parce que si mes souvenirs sont bons, dès la sortie des premiers pentium, il est devenu plus rapide de traiter une division (par exemple) en virgule flottante 32 bits via le fpu, que sur un registre 32 bits traité par le cpu!
Le chêne aussi était un gland, avant d'être un chêne
Hé bien, les variables à virgule flottante tiennent leur nom du fait que la virgule est placée de manière à optimiser la précision selon que l'on stocke un nombre élevé ou non, c'est à dire que plus le nombre est faible, plus on garde d'espace pour la précision après la virgule, et donc la virgule est flottante afin d'opter pour le meilleur compromis à chaque évolution de la valeur.
Une variable à virgule fixe est bien plus simple finalement, puisqu'on se contente d'aménager un espace fixe permettant d'accueillir une certaine précision après la virgule.
Et pour ça il suffit de multiplier par un nombre choisi en fonction de certains compromis, par 256 par exemple. Ainsi, on perd 8 bits dans la possibilité de grandeur du nombre, mais on aménage une virgule sur 8bits...
Par exemple 1.25*256 donne 320, ensuite on peut faire des opérations sur cette valeur, tout en conservant le 0.25 dans les 8 bits de la virgule, et il suffit de diviser par 256 pour retrouver la partie entière du nombre...
L'intérêt de fonctionner avec un exposant 2 (256), plutôt que 1000 par exemple, c'est que le programme sera bien plus efficace ainsi, puisque les instructions permettant de multiplier ou diviser par des exposants 2 sont infiniment plus rapides qu'en décimal. De plus, on peut récupérer la virgule simplement en lisant les 8 premiers bits de la valeur, tandis qu'en décimal le modulo est obligatoire.
Et je m'interroge sur le matériel dont tu disposes! Ou bien, il faut que tu saches qu'il existe différentes tailles de variables à virgule flottante, plus ou moins longues à la tâche! Parce que si mes souvenirs sont bons, dès la sortie des premiers pentium, il est devenu plus rapide de traiter une division (par exemple) en virgule flottante 32 bits via le fpu, que sur un registre 32 bits traité par le cpu!
Le chêne aussi était un gland, avant d'être un chêne
18 oct. 2014 à 21:54
Modifié par nicocorico le 18/10/2014 à 22:26
Et si les virgules flottantes sont si péniblement traitées, c'est sans doute que le proc n'intègre pas d'unité de traitement spécialisée, et qu'une fonction du C se charge du calcul, ce qui est horriblement lent!
Dans ce cas la virgule fixe peut réellement t'aider oui.
Par contre les registres sont probablement de faible taille, genre 16 bits... ce serait beau qu'il fassent 32 bits!
Et pour bien cerner le fonctionnement de la virgule fixe hé bien, c'est simple: Mettons qu'on a le nombre 124.455 et qu'on ne veuille pas s'embarrasser de calculs compliqués avec la virgule; en ce cas on le multiplie par 1000, et voilà, plus de virgule! Pour bien interpréter le résultat, il suffira de le diviser par mille et le tour est joué!
C'est le principe même de la virgule fixe.
19 oct. 2014 à 13:27
x[Sommet]=Rayon*cos((theta+Sommet*90+1)*3.1415/180) + CentreAbscisseCarre;
Mais si je fais x[Sommet]=Rayon*cos((theta+Sommet*90+1)*31415/180)/10000 + CentreAbscisseCarre;
Et bien, ça ne me donne pas du tout le résultat attendu !
21 oct. 2014 à 09:55
Et surtout le problème, c'est le cosinus! Dans tous les cas il va être obtenu sous forme de virgule flottante, donc le ralentissement sera inévitable à partir de là!
En fait, si le rayon bouge peu, il faudrait que tu créés un tableau avec des valeurs (Rayon*Cos) précalculées et stockées en virgule fixe pour conserver une certaine précision, ce sera sans doute le seul moyen d'obtenir des calculs vraiment rapides. La taille du tableau déterminera la précision obtenue en fonction de (theta+sommet*90+1).
Au pire tu pourrais aussi faire un tableau de cosinus seul précalculé, là aussi en virgule fixe...