Как функция Scheme работает неточно -> точно? - PullRequest
1 голос
/ 27 декабря 2010

Как работает процедура Схемы inexact->exact, описанная в SICP?

Ответы [ 2 ]

6 голосов
/ 27 декабря 2010

Стандарт Схемы дает только некоторые общие ограничения на то, как записывается точность / неточность, но большинство реализаций Схемы, вплоть до стандарта R5RS, работают следующим образом (Схема MIT, которая является «родным языком» SICP, также работает следующим образом):

  1. Информация о типе для каждой ячейки, которая содержит данные числового типа, указывает, являются ли данные точными или неточными.
  2. Арифметические операции с записью данных выводят точность результата из точности входных данных, где, как правило, неточность является заразной: если какой-либо из операндов неточен, результат, вероятно, будет таким же. Обратите внимание, однако, что реализациям Scheme разрешается выводить точность в особых случаях, например, если вы умножите неточный 4,3 на точное 0, вы можете точно знать, что результат равен 0.
  3. Специальные операции «Неточный - точный и точный -> неточный» - приводятся к числовым типам, гарантируя, что результирующий тип является точным или неточным соответственно.

Некоторые моменты: во-первых, разные стандарты схем различаются, когда операторы дают точность или нет; стандарты определяют, что происходит. Например, несколько реализаций Scheme имеют представления для точных рациональных значений, что позволяет точно представлять (/ 1 3), тогда как реализация Scheme только с плавающей точкой должна представлять это неточно.

Во-вторых, R6RS имеет понятие заражения, отличное от понятия SICP и более ранних стандартов, потому что более старый критерий, честно говоря, нарушен.

0 голосов
/ 27 декабря 2010

Точность - это просто свойство числа: оно не меняет значение самого числа.Таким образом, для реализации, которая использует флаг для указания точности, inexact->exact просто устанавливает флаг точности для этого числа.

...