实现一个任意精度的Decimal类型。
浮点数是计算机中表示非整数实数最常见的方式,也是由 IEEE 754 定义的一套通用标准。浮点数非常灵活、用途广泛,但也确实存在一些局限。浮点运算中有一个著名的例子:0.1 + 0.2 != 0.3。
解决这个问题的办法,是另找一种无损的方式来建模任意精度的非整数实数。与浮点数相比,这种方式的效率可能更低,无论是内存占用还是处理速度;目标在于给出精确的结果。
尽管Decimal是一个自定义类型,我们仍然应该能把它们当作数字来对待:==、<、>、+、-和*这些运算符在 Decimal 上都要能按预期工作。为了方便起见,你不必实现除法,因为任意精度的除法很快就会失控。(任意精度的1/3该怎么表示呢?)
在 Rust 中,要让自定义类型支持这些运算,就得为它实现相应的 trait。具体来说,你至少需要实现PartialEq、PartialOrd、Add、Sub和Mul。严格来说,既然十进制数构成全序,你也应该实现Eq和Ord,不过这些测试并不检查这两个 trait。
借助 bigdecimal crate 来实现这道练习会非常容易。但请不要这样做,自己动手实现吧。