Skip to content

Latest commit

 

History

History
30 lines (18 loc) · 2.04 KB

README.zh.md

File metadata and controls

30 lines (18 loc) · 2.04 KB

十进制

实现任意精度的Decimal类。

浮点数是计算中非整数实数的最常见表示,它们是由IEEE 754标准定义。它们非常灵活且通用,但它们确实有一些局限性。众所周知,在浮点运算中,0.1 + 0.2 != 0.3

解决这一问题的方法是,寻找另一种无损的方法来模拟任意精度的非整数 实数。这可能在内存或处理速度方面,不如浮点数有效;但目标是提供准确的结果。

尽管Decimal作为一种自定义类型,我们仍然应该能够将它们视为数字: 而==<>+-*操作符都应该按小数进行工作。只是权宜之计,你不需要执行除法,因为任意的精确除法很快就会失控。(如何表示任意精度1/3?)

在 Rust 中,将这些操作用于自定义类型的方法是,实现自定义对象的相关 trait。特别是,您至少需要实现.PartialEqPartialOrdAddSubMul。 严格地说,由于十进制数构成一个总排序,你也应该实现EqOrd,尽管这些 trait 并没有被这些测试所检验.

笔记

使用这种.bigdecimal箱子方法很容易实现这个练习。但不要那样做,你自己来实现。

提示

  • 不要从头开始执行任意精确的算术,而是考虑在num_bigint箱子之上构建自己的类。
  • 你也许能derive一些需要的 trait。
  • Decimal假设为符号类型。你不必创建一个单独的无符号类型,尽管你可以这样做,如果你选择这么样,能作为一个实现细节。

资源

Peter Goodspeed-Niklaus