Scheme函数如何处理不精确 - >精确操作?

1 scheme inexact-arithmetic

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

Cha*_*art 6

Scheme标准仅对如何记录准确性/不精确性给出了一些一般约束,但大多数Scheme实现,直到标准R5RS,操作如下(MIT Scheme,这是SICP的"母语",也是这样工作的):

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

一些要点:首先,不同的方案标准在运营商是否准确时有所不同; 标准不足以确定发生了什么.例如,若干Scheme实现具有精确有理数的表示,允许精确(/ 1 3)表示,其中仅具有浮点数的Scheme实现必须表示不精确.

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