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