J'écris des applications financières dans lesquelles je me bats constamment pour savoir s'il faut utiliser un double ou une décimale.
Tous mes calculs portent sur des nombres qui n'ont pas plus de 5 décimales et qui ne sont pas supérieurs à ~100 000. J'ai l'impression que tous ces nombres peuvent être représentés par des doubles sans erreur d'arrondi, mais je n'en ai jamais été sûr.
Je passerais bien des décimales aux doubles pour l'avantage évident de la rapidité, sauf qu'en fin de compte, j'utilise toujours la méthode ToString pour transmettre les prix aux bourses, et je dois m'assurer qu'elle produit toujours le nombre que j'attends. (89.99 au lieu de 89.99000000001)
Questions :
- L'avantage en termes de vitesse est-il vraiment aussi important que les tests naïfs le suggèrent ? (~100 fois)
- Existe-t-il un moyen de garantir que la sortie de ToString sera ce que je veux ? Est-ce que cela est assuré par le fait que mon nombre est toujours représentable ?
MISE À JOUR : Je dois traiter ~ 10 milliards de mises à jour de prix avant que mon application puisse fonctionner, et j'ai implémenté la décimale pour le moment pour des raisons évidentes de protection, mais cela prend ~3 heures juste pour s'allumer, les doubles réduiraient considérablement mon temps d'exécution. Existe-t-il un moyen sûr de le faire avec des doubles ?
1 votes
Quel est votre goulot d'étranglement ? Où exactement brûlez-vous tous vos cycles CPU ? Sans mesures solides, il y a de fortes chances que vous vous intéressiez à la mauvaise chose.
4 votes
Étant donné que les dénominateurs décimaux sont des puissances de 10 et que les dénominateurs binaires sont des puissances de 2, même une seule décimale ne peut être représentée sans erreur. Par exemple, 0,1 (un dixième) n'a pas d'équivalent exact en binaire, ce qui est le même principe qu'un tiers n'a pas de représentation exacte en décimal.