Scheme 函数 inexact->exact 是如何操作的?

发布于 2024-10-09 11:18:12 字数 63 浏览 2 评论 0原文

SICP 中描述的Scheme 过程inexact->exact 是如何运行的?

How does the Scheme procedure inexact->exact, described in SICP, operate?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

恋你朝朝暮暮 2024-10-16 11:18:12

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

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

几点:第一,不同的方案标准在运营商给出的准确与否上存在差异;标准不足以决定会发生什么。例如,几个Scheme实现具有精确有理数的表示,允许精确地表示(/ 1 3),而仅具有浮点数的Scheme实现必须不精确地表示这一点。

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

The Scheme standard only gives some general constraints on how exactness/inexactness is recorded, but most Scheme implementations, up to standard R5RS, operate as follows (MIT Scheme, which is SICP's "mother tongue", also works this way):

  1. The type information for each cell that contains data of a numeric type says whether the data is exact or inexact.
  2. Arithmetic operations on the data record derive the exactness of the result from the exactness of the inputs, where generally inexactness is infectious: if any of the operands is inexact, the result probably will be so too. Note, though, Scheme implementations are allowed to infer exactness in special cases, say if you multiply inexact 4.3 by exact 0, you can know the result is 0 exactly.
  3. The special operations inexact->exact and exact->inexact are casts on the numeric types, ensuring that the resulting type is exact or inexact respectively.

Some points: first, different scheme standards vary in when operators give exactness or not; the standards underdetermine what happens. For example, several Scheme implementations have representations for exact rationals, allowing (/ 1 3) to be represented exactly, where a Scheme implementation with only floats must represent this inexactly.

Second, R6RS has a different notion of contagion from that of SICP and earlier standards, because the older criterion is, frankly, broken.

一场信仰旅途 2024-10-16 11:18:12

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

Exactness is simply a property of a number: it doesn't change the value of the number itself. So, for an implementation that uses a flag to indicate exactness, inexact->exact simply sets the exactness flag on that number.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文