Implémente un type Decimal à précision arbitraire.
Les nombres à virgule flottante sont la représentation la plus courante des nombres réels non entiers en informatique, et ils suivent une norme courante définie par IEEE 754. Ils sont très souples et polyvalents, mais ils ont malgré tout quelques limites. Un exemple célèbre : en arithmétique à virgule flottante, 0.1 + 0.2 != 0.3.
La solution à ce problème consiste à trouver une autre façon, sans perte, de représenter les nombres réels non entiers à précision arbitraire. Cette approche peut être moins efficace que les nombres à virgule flottante en termes de mémoire ou de vitesse de traitement ; l'objectif est de fournir des résultats exacts.
Même si Decimal est un type personnalisé, on doit pouvoir les manipuler comme des nombres : les opérateurs ==, <, >, +, - et * doivent tous fonctionner comme prévu sur des Decimal. Pour ne pas compliquer les choses, tu n'es pas obligé d'implémenter la division, car la division à précision arbitraire peut très vite devenir ingérable. (Comment représenter 1/3 avec une précision arbitraire ?)
En Rust, pour obtenir ces opérations sur un type personnalisé, il faut implémenter les traits correspondants. En particulier, tu devras implémenter au moins PartialEq, PartialOrd, Add, Sub et Mul. À proprement parler, étant donné que les nombres décimaux forment un ordre total, tu devrais aussi implémenter Eq et Ord, même si ces tests ne vérifient pas ces traits.
Il serait très facile de résoudre cet exercice en utilisant la crate bigdecimal. Ne fais pas ça ; implémente-le toi-même.
Inscris-toi sur Exercism pour apprendre et maîtriser Rust avec 99 exercices, et un vrai mentorat humain, le tout gratuitement.