Decimal

Decimal

Intermedia

Instrucciones

Implementa un tipo Decimal de precisión arbitraria.

Los números de punto flotante son la representación más común de los números reales no enteros en la computación, y son un estándar común definido por IEEE 754. Son muy flexibles y versátiles, pero sí tienen algunas limitaciones. Como es bien sabido, en la aritmética de punto 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 esto sea menos eficiente en cuanto a memoria o velocidad de procesamiento que los números de punto flotante; el objetivo es ofrecer resultados exactos.

A pesar de que Decimal es un tipo personalizado, aún deberíamos poder tratarlos como números: los operadores ==, <, >, +, - y * deberían funcionar como se espera con los Decimal. Por conveniencia, no se te pide que implementes la división, ya que la división de precisión arbitraria puede descontrolarse muy rápido. (¿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 esas pruebas no verifican estos traits.

Sería muy fácil implementar este ejercicio usando el crate bigdecimal. No lo hagas; impleméntalo por tu cuenta.


Fuente

Peter Goodspeed-Niklaus
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Rust Exercism

¿Todo listo para empezar Decimal?

Regístrate en Exercism para aprender y dominar Rust con 99 ejercicios y mentoría humana real, todo gratis.