Implementa un tipo Decimal de precisión arbitraria.
Los números en coma flotante son la representación más común de los números reales no enteros en informática, y son un estándar común definido por IEEE 754. Son muy flexibles y versátiles, pero tienen algunas limitaciones. Es famoso que, en aritmética de coma flotante, 0.1 + 0.2 != 0.3.
La solución a este problema es encontrar otra forma sin pérdida de modelar números reales no enteros de precisión arbitraria. Puede que sea menos eficiente en cuanto a memoria o velocidad de procesamiento que los números en coma flotante; el objetivo es ofrecer resultados exactos.
Aunque Decimal sea un tipo personalizado, deberíamos poder tratarlos igualmente como números: los operadores ==, <, >, +, - y * deberían funcionar como se espera con los Decimal. Por conveniencia, no es necesario que implementes la división, ya que la división de precisión arbitraria puede descontrolarse con mucha rapidez. (¿Cómo representarías 1/3 con precisión arbitraria?)
En Rust, la forma de conseguir estas operaciones en tipos personalizados es implementar los traits correspondientes. En particular, tendrás que implementar al menos PartialEq, PartialOrd, Add, Sub y Mul. En sentido estricto, dado que los números decimales forman un orden total, también deberías implementar Eq y Ord, aunque estos tests no comprueban esos traits.
Sería muy fácil implementar este ejercicio usando el crate bigdecimal. No lo hagas; impleméntalo tú mismo.
Regístrate en Exercism para aprender y dominar Rust con 99 ejercicios y mentoría humana real, todo gratis.