任何二级数学学生都可以证明,pi是不合理的。
然而:
Welcome to Racket v5.3.6.
> pi
3.141592653589793
> (rational? pi)
#t
这是因为pi的表示在底层机器的浮点格式中具有有限的精度,因此总是可以表示为某些p / q,其中q是10 ^ n,并且n是代表精度?
如果是这样,那么Racket(或其他类似行为计划)抛出的任何数字怎么可能被认为是理性的?因此,为什么要烦扰rational?
函数?
更新,即使(rational? (sqrt 3))
举报#t
答案 0 :(得分:3)
pi
返回的数字是合理的,因为documentation是这样说的。具体来说它说:
所有数字都是复数。其中一些是实数,所有可以表示的实数都是有理数,除了+ inf.0(正无穷大),+ inf.f(单精度变量),-inf.0(负数) infinity), - inff.f(单精度变量),+ nan.0(非数字)和+ nan.f(单精度变量)。在有理数中,有些是整数,因为应用于数字的圆形产生相同的数字。
所以你的预感是正确的。所有可表示的实数确实是合理的(除了无穷大和NaN),因为,是的,数字存储在固定大小的寄存器中,因此机器不会存储无理数。 / p>
至于为什么球拍设计师对rational?
功能感到困扰,这是一个很好的问题。像Julia和Clojure这样的许多语言都有一个真实的,实际的,诚实的,有益的理性数据类型。 Racket没有,因此,正如您所怀疑的那样,将实数的近乎完整的子集定义为有理数似乎似乎。
但是你知道,可能方便有办法谈论非NaN,非Infinity值。我会称之为finite
,但是Racket称之为rational
。