Песочница

Числовые процедуры

Аргументы, точность и ошибки арифметики, сравнений, целочисленного деления, округления, gcd/lcm, степеней и целочисленных квадратных корней.

Выберите числовую процедуру и проверьте требования к её аргументам. Примеры показывают, как собрать два результата и как работает деление отрицательных целых чисел.

Получите целочисленный квадратный корень и остаток

Запустите весь пример на площадке.

LISPEX
(call-with-values (lambda () (exact-integer-sqrt 20)) list)

Результат

ВЫВОД
(4 4)

Процедура возвращает два значения. Первое — наибольшее целое, квадрат которого не превышает 20. Второе — остаток, поэтому 20 = 4 × 4 + 4. Вызов call-with-values передаёт оба значения процедуре list, чтобы показать их вместе.

Выберите способ деления отрицательных целых

LISPEX
(list (call-with-values (lambda () (floor/ -7 3)) list)
      (call-with-values (lambda () (truncate/ -7 3)) list))

Результат

ВЫВОД
((-3 2) (-2 -1))

Обе процедуры возвращают частное и остаток. Процедура floor/ округляет частное вниз и получает -3. Процедура truncate/ округляет к нулю и получает -2. В обоих случаях делимое равно произведению делителя на частное плюс остаток.

Проверьте аргументы и результаты

В таблице ... означает, что можно передать дополнительные аргументы того же типа.

ВызовАргументы и результатОшибки
(+ number ...), (* number ...)Ноль или больше чисел. (+) возвращает 0, (*) возвращает 1E312 неверный тип; E314 неконечный результат
(- number ...), (/ number ...)Одно или больше чисел. (- 5) возвращает -5, (/ 4) возвращает 1/4E302 нет аргументов; E312 неверный тип; E313 нулевой делитель; E314 неконечный результат
(= number number ...) и < > <= >=Не менее двух чисел. Сравнение точное даже при смешении точных и неточных чиселE302 мало аргументов; E312 неверный тип
(floor/ integer integer), (truncate/ integer integer)Два целых. Возвращают частное и остаток двумя значениямиE312 нецелое; E313 нулевой делитель; E314 неточный результат слишком велик
(expt number exact-integer)Основание и точный целый показатель. Результат сохраняет точность основанияE312 неверный тип; E313 точный ноль в отрицательной степени; E314 результат непредставим
(exact-integer-sqrt exact-nonnegative-integer)Одно точное целое не меньше нуля. Возвращает точный целочисленный корень и остатокE312 аргумент не является точным неотрицательным целым

Процедуры +, -, * и / дают точный результат, если все аргументы точные. Деление может вернуть целое число, например (/ 10 5) → 2, или дробь. Любой неточный аргумент делает их результат неточным.

Целочисленное деление принимает числа с целым значением, например 7.0, но отвергает 7/2. Результат неточный, если хотя бы один аргумент неточный. А показатель expt должен быть точным целым, поэтому (expt 2 3.0) вызывает E312.

Другие числовые операции

Для округления используйте floor, ceiling, round и truncate. Они сохраняют точность, а round округляет значения посередине между целыми к ближайшему чётному. Процедуры gcd и lcm вычисляют наибольший общий делитель и наименьшее общее кратное.

Лиспекс работает с конечными вещественными числами. Вычисление, которое дало бы бесконечность или NaN, вызывает E314. Общие трансцендентные функции, такие как sin и log, не поддерживаются.

Связанные страницы

Раздел Точные и приближённые числа объясняет смешанную арифметику и вывод результатов. Другие группы процедур перечислены в указателе процедур.