有理数四则运算
【题目】计算机内的浮点数是一种近似表示法。而我们都知道,除法运算产生的小数,要么是有限的,要么就是无限的循环小数。这会因为硬件的制约而导致精度的损失。在一般情况下不是问题,但在有些特殊场合,是不允许有误差的。
还好,我们知道,有理数可以表示为整数的比值。如果我们直接存储这个比值,而不是小数,对四则运算将不会的精度的损失。
许多的语言都内置了有理数
类。请自行设计一个有理数类型,能支持四则则运算。
这个问题不复杂。要注意以下2点:
- 表示分子分母的整数可能会变得很大。普通的Int不行,需要大整数。
- 整数在存储和显示的时候,应该表示为既约分数。
- 如果再精细一点,对 x/0 型应特殊处理。表达为 Inf, NaN 等…
haskell 标准库中有Ratio 类型。也有大整数类型。
这里利用它的大整数类型,定义一个简单的 有理数 类型。
module Rati (Rati(..), mkRati, (+.), (-.), (*.),