Песочница

Точные и неточные числа

Лиспекс поддерживает точные целые числа произвольной точности, сокращённые точные рациональные и конечные вещественные числа IEEE-754, которые всегда выводятся в одной и той же позиционной форме.

Когда это нужно

Используйте точные целые и рациональные числа, если математический результат должен оставаться точным. Вводите вещественное число только для неточного измерения или намеренно неточной операции.

Проверьте запуском

LISPEX
(list (/ 1 3) (+ 1 2.0) (number->string -0.0))

Наблюдаемый результат

OUTPUT
(1/3 3.0 "-0.0")

Разбор примера

1/3 остаётся точной сокращённой дробью. Сложение точного 1 с неточным 2.0 даёт неточное 3.0. Печать сохраняет знак отрицательного нуля, поэтому number->string возвращает "-0.0".

Как рассуждать

  • Точная арифметика остаётся точной, а + - * / становятся неточными при любом неточном операнде. Сравнения смешанных чисел выполняются точно.
  • Бесконечность и NaN не могут попасть в выполнение. Деление на ноль даёт E313, а получение неконечного результата даёт E314.
  • Конечные вещественные числа выводятся в кратчайшей форме с точным обратным чтением. Форма вывода только позиционная, с обязательным .0 и сохранением -0.0.

Быстрый выбор

ВидПримерыГлавное правило
точное целое0, -12, 999999999999произвольная точность
точное рациональное1/3, -5/2сокращённая дробь с положительным знаменателем
конечное вещественное2.0, -0.0, 0.125конечное IEEE-754, всегда в одной позиционной форме
смешанная арифметика(+ 1 2.0)неточный операнд делает арифметический результат неточным
смешанное сравнение(= 2 2.0)математическое сравнение без потери точности

Частая ошибка

Комплексные числа и трансцендентные функции платформенной libm исключены.

Текущие границы

  • Правило заразности точности арифметики нельзя переносить на выбор и сравнение.

Куда дальше

Домены и сигнатуры перечислены в числовом справочнике, а отличие числового равенства от чувствительного к точности объясняет глава о равенстве.

Числовые процедуры · Равенство