Rya*_*ell 5 rational-numbers racket
正如任何中学数学学生都可以证明的那样,pi是不合理的。
但是:
Welcome to Racket v5.3.6.
> pi
3.141592653589793
> (rational? pi)
#t
Run Code Online (Sandbox Code Playgroud)
这是因为在基础机器的浮点格式中pi 的表示精度有限,因此始终可以表示为p / q,其中q为10 ^ n,n为表示精度吗?
如果是这样的话,那么,除了合理性之外,如何将球拍(或其他行为类似的计划)抛出的任何数字都视为非理性?因此,为什么还要烦恼该rational?功能呢?
更新:甚至(rational? (sqrt 3))报告#t
返回的数字pi是有理数,因为文档是这么说的。具体来说,它说:
所有数字都是复数。其中一些是实数,所有可以表示的实数也是有理数,除了+inf.0(正无穷大),+inf.f(单精度变体),-inf.0(负无穷)无穷大)、-inf.f(单精度变体)、+nan.0(非数字)和 +nan.f(单精度变体)。在有理数中,有些是整数,因为对数字进行舍入会产生相同的数字。
所以你的预感是对的。所有可表示的实数确实都是有理数(除了无穷大和 NaN),因为数字存储在固定大小的寄存器中,因此机器不会存储无理数。
至于为什么Racket 设计师要费心去设计一个rational?功能,这是一个很好的问题。许多语言(例如 Julia 和 Clojure)都有真实、真实、诚实的理性数据类型。Racket 没有,因此,正如您所怀疑的那样,将实数的近乎完整子集定义为有理数似乎确实很愚蠢。
但你知道,有一种方法来讨论非 NaN、非 Infinity 值可能会很方便。我本来会这样称呼它finite,但 Racket 却这样称呼它rational。