1

SICP 中描述的 Scheme 程序如何inexact->exact运作?

4

2 回答 2

6

Scheme 标准仅对如何记录准确性/不精确性给出了一些一般性限制,但大多数 Scheme 实现,直到标准 R5RS,操作如下(MIT Scheme,它是 SICP 的“母语”,也以这种方式工作):

  1. 每个包含数字类型数据的单元格的类型信息说明数据是准确的还是不准确的。
  2. 数据记录上的算术运算从输入的准确性中推导出结果的准确性,其中通常不精确性具有传染性:如果任何操作数不精确,结果可能也会如此。但请注意,Scheme 实现允许在特殊情况下推断精确性,例如如果将不精确的 4.3 乘以精确的 0,则可以知道结果精确为 0。
  3. 特殊操作 inexact->exact 和 exact->inexact 是对数值类型的强制转换,确保结果类型分别是精确的或不精确的。

几点:第一,不同的方案标准在运营商给出的准确与否方面有所不同;标准不确定会发生什么。例如,几个 Scheme 实现具有精确有理数的表示,允许精确(/ 1 3)表示,其中只有浮点数的 Scheme 实现必须不精确地表示。

其次,R6RS 具有与 SICP 和早期标准不同的传染概念,因为坦率地说,旧标准已经被打破。

于 2010-12-27T14:28:58.837 回答
0

精确度只是数字的一个属性:它不会改变数字本身的值。因此,对于使用标志来指示准确度的实现,inexact->exact只需在该数字上设置准确度标志。

于 2010-12-27T14:28:31.250 回答