Implemente um tipo Decimal de precisão arbitrária.
Os números de ponto flutuante são a representação mais comum de números reais não inteiros na computação, e são um padrão comum definido pela IEEE 754. Eles são muito flexíveis e versáteis, mas têm algumas limitações. Como é famoso, na aritmética de ponto flutuante, 0.1 + 0.2 != 0.3.
A solução para esse problema é encontrar outra forma, sem perdas, de modelar reais não inteiros de precisão arbitrária. Isso pode ser menos eficiente em termos de memória ou de velocidade de processamento do que os números de ponto flutuante; o objetivo é fornecer resultados exatos.
Apesar de Decimal ser um tipo personalizado, ainda devemos conseguir tratá-los como números: os operadores ==, <, >, +, - e * devem funcionar como esperado em Decimals. Por conveniência, você não precisa implementar a divisão, já que a divisão de precisão arbitrária pode rapidamente sair do controle. (Como você representa 1/3 de precisão arbitrária?)
Em Rust, a forma de obter essas operações em tipos personalizados é implementar as traits relevantes. Em particular, você precisará implementar pelo menos PartialEq, PartialOrd, Add, Sub e Mul. A rigor, como os números decimais formam uma ordenação total, você também deve implementar Eq e Ord, embora essas traits não sejam verificadas por estes testes.
Seria muito fácil implementar este exercício usando o crate bigdecimal. Não faça isso; implemente você mesmo.
Crie sua conta no Exercism para aprender e dominar Rust com 99 exercícios e mentoria humana de verdade, tudo de graça.