Question

Pour les calculs intensifs, je pense utiliser un point fixe au lieu d'un point flottant. Bien sûr, le nombre d'octets de la taille du point fixe, le type de processeur sur lequel il sera exécuté, seront importants, si je peux utiliser (pour Intel) le MMX ou le SSE ou toute autre nouveauté ...

Je me demande si ces jours-ci, lorsque la virgule flottante est plus rapide que jamais, vaut-il la peine d'envisager un point fixe? Existe-t-il des règles générales permettant d'affirmer que cela importera à plus de quelques pour cent? Quel est l’aperçu des performances numériques à partir de 35 000 pieds? (BTW, je suppose un processeur général comme on le trouve dans la plupart des ordinateurs, pas DSP ou systèmes embarqués spécialisés.)

Était-ce utile?

La solution

Cela en vaut toujours la peine. La virgule flottante est plus rapide que par le passé, mais la virgule fixe l'est aussi. Et la solution est toujours la seule solution si vous tenez à une précision supérieure à celle garantie par IEEE 754.

Autres conseils

Dans les cas où vous traitez de très grandes quantités de données, le point fixe peut être deux fois plus efficace en termes de mémoire, par exemple. un entier long de quatre octets, par opposition à un double de huit octets. Une technique souvent utilisée dans les grands ensembles de données géospatiales consiste à réduire toutes les données à une origine commune, de sorte que les bits les plus significatifs puissent être supprimés, et à utiliser des entiers à points fixes pour le reste. La virgule flottante n’a d’importance que si elle flotte, c’est-à-dire que vous avez affaire à un très large éventail de nombres avec une très grande précision.

Une autre bonne raison d'utiliser une décimale fixe est que l'arrondi est beaucoup plus simple et prévisible. La plupart des logiciels financiers utilisent des décimales de précision arbitraire à virgule fixe avec un arrondi égal à moitié pour représenter l'argent.

Il est presque TOUJOURS plus rapide d’utiliser un point fixe (expérience de x86, pentium, 68k et ARM). Cela peut cependant dépendre également du type d'application. Pour la programmation graphique (l’une de mes principales utilisations du point fixe), j’ai été capable d’optimiser le code à l’aide de tables de cosinus, de tables de log, etc. pré-construites, mais les opérations mathématiques de base se sont également révélées plus rapides.

Un commentaire sur un logiciel financier. Il a été dit dans une réponse précédente que le point fixe est utile pour les calculs financiers. De par ma propre expérience (développement d’un grand système de gestion de trésorerie et d’une vaste expérience du traitement des cartes de crédit), je n’utiliserais PAS de point fixe. Vous aurez des erreurs d'arrondi en utilisant soit un point flottant, soit un point fixe. Nous utilisons toujours des montants entiers pour représenter des montants monétaires, en comptant le montant minimum possible (1c pour l’euro ou le dollar). Cela garantit qu'aucun montant partiel n'est jamais perdu. Lorsque vous effectuez des calculs complexes, les valeurs sont converties en doubles, les règles d'arrondi spécifiques à l'application sont appliquées et les résultats sont reconvertis en nombres entiers.

Utilisez virgule fixe lorsque le matériel ne prend pas en charge la virgule flottante ou si sa mise en oeuvre est fastidieuse.

Faites également attention lorsque vous créez des cours pour cela Quelque chose que vous pensez rapide pourrait effectivement devenir un chien quand il s'agit de profiler en raison de copies (non) nécessaires de classes. C’est une autre question pour une autre fois cependant.

Une autre raison d'utiliser le point fixe est que les ARM , comme les téléphones mobiles et les tablettes, ne disposent pas de FPU (au moins de nombreux d'entre eux).

Pour développer des applications temps réel, il est judicieux d’optimiser les fonctions en utilisant l’arithmétique en virgule fixe. Il existe des implémentations de FFT (Fast Fourier Transform), très importantes pour les graphismes, qui basent leurs améliorations sur l’efficacité en s’appuyant sur l’arithmétique en virgule flottante.

Puisque vous utilisez un processeur polyvalent, je vous conseillerais de ne pas utiliser de point fixe, à moins que les performances ne soient si critiques pour votre application que vous deviez compter tous les tics. La mise en œuvre de points fixes et la résolution de problèmes tels que le dépassement de capacité ne sont tout simplement pas rentables si vous avez un processeur qui le fera pour vous.

IMHO, le point fixe n’est nécessaire que si vous utilisez un DSP sans support matériel pour les opérations en virgule flottante.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top