Scheme函数如何运行不精确 - >精确操作?

时间:2010-12-27 14:05:28

标签: scheme inexact-arithmetic

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

2 个答案:

答案 0 :(得分:6)

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

  1. 包含数字类型数据的每个单元格的类型信息表示数据是准确还是不准确。
  2. 对数据记录的算术运算从输入的精确性得出结果的准确性,其中通常不精确是传染性的:如果任何操作数不精确,结果可能也是如此。但请注意,允许Scheme实现在特殊情况下推断出精确性,比如如果将不精确的4.3乘以精确0,则可以确切地知道结果为0。
  3. 特殊操作不精确 - >完全和精确 - >不精确在数字类型上进行强制转换,确保结果类型分别精确或不精确。
  4. 有些观点:首先,不同的方案标准在运营商是否准确时有所不同;标准不足以确定发生了什么。例如,若干Scheme实现具有精确有理数的表示,允许精确表示(/ 1 3),其中仅具有浮点数的Scheme实现必须表示不完整。

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

答案 1 :(得分:0)

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