Песочница

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

Лиспекс поддерживает точные целые произвольной точности, сокращённые точные рациональные и конечные вещественные 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 исключены.

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

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

Куда дальше

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

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