Chinaunix首页 | 论坛 | 博客
  • 博客访问: 336108
  • 博文数量: 105
  • 博客积分: 2730
  • 博客等级: 少校
  • 技术积分: 1110
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-20 12:09
文章分类

全部博文(105)

文章存档

2013年(3)

2012年(2)

2011年(36)

2010年(34)

2009年(6)

2008年(20)

2007年(4)

分类:

2011-01-07 19:13:15

学习haskell的过程中了解其基本class,对'数'的定义有些让我费力, 经过仔细的思考有了一些新的认识,在此记录一下.废话很多.


Prelude库包含了对基本类型的定义
各种class:

Eq :
 表示可判断等于的类型, 几乎任何基础的类型都可以等于一下.

Eq => Ord :
 Ord是Eq的子集, 表示有序的,也就是互相之间可以比大小的.

Enum :
 是可被枚举的. 和Ord有些类似,它用前驱和后继来表示相邻的元素,succ 1 = 2.

Bounded :
 有界的. 定义了最大值和最小值. 但是并不一定是Ord的. Int8这类固定长度的是有界的,Integer和浮点则是无界的.


data Int Integer Float Double 都是定义
type Rational = Ratio Integer 引用了比例的Integer实例, 表示有理数.

更多class:

Eq,Show => Num :
 数值.只定义了+-*操作,没有除.

Num,Ord => Real :
 实数, 在数值的基础上加上有序的约束,实数一要能比相等,还能比大小.

Real,Enum => Integral :
 整数, 在实数的基础上加上可枚举, 其实就是有前驱和后继. 整数的前驱和后继总是+1,-1, 而一般的实数则没有固定的前驱和后继.

Real => Fractional :
 分数, 支持除法.

Fractional => Floating :
 浮点数, 定义了很多运算,三角函数,e,π,幂运算.

Real,Fractional => RealFrac :
 实数和分数的交集的子集, 可以理解为精度总是有限的数(可以有限表示).

RealFrac,Floating => RealFloat :
 其实现仅仅有Float和Double, 包含了多种对浮点数据类型的函数, 和IEEE754紧密结合的.


正题:

Fractional翻译过来是分数,称其为小数在中文里不太恰当. 小数包含有限小数.无限循环小数和无限不循环小数. 无限不循环小数不是分数.
无限循环小数和有限小数是一码事,为什么呢.

分数就是两个整数相除,a/b.
如果a>=b, 可以用代分数来表示: x又a'/b,xb+a'=a.
a/b的小数表示等价于a'/b的小数表示.
那么就考虑a如果是1/2这样的形式,得到的是有限小数0.5.
如果是1/3这样的形式,得到的是无线循环小数0.33333循环.
但是,这只是10进制下的情况,如果改变数制, 比如3进制,那么1/3就是0.1了.
这样来看,对于无限循环小数之所以存在是由于当前的分母与数制互质造成的。
举例来说:2和10不互质,所以*/2都是有限小数。
而3和10互质,则*/3一定会出现无限循环小数。
所以无限循环小数和有限小数是一家,而无限不循环小数则是另一回事。
巴比伦人(好像)发明的60进制来记时间,就是因为60的与2 3 4 5 6都是相合的,非常方便得到各种精确的分割。试想如果一个小时有10分钟。那么一个小时干完三件事似乎总不能严格的描述。

所以说有理数,就是能够明确知道其大小的数。
阅读(1067) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~