實作一個任意精度的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 來實作這個練習會非常輕鬆。別這麼做喔,請自己實作。