Выберите числовую процедуру и проверьте требования к её аргументам. Примеры показывают, как собрать два результата и как работает деление отрицательных целых чисел.
Получите целочисленный квадратный корень и остаток
Запустите весь пример на площадке.
(call-with-values (lambda () (exact-integer-sqrt 20)) list)Результат
(4 4)Процедура возвращает два значения. Первое — наибольшее целое, квадрат которого не превышает 20. Второе — остаток, поэтому 20 = 4 × 4 + 4. Вызов call-with-values передаёт оба значения процедуре list, чтобы показать их вместе.
Выберите способ деления отрицательных целых
(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, (*) возвращает 1 | E312 неверный тип; E314 неконечный результат |
(- number ...), (/ number ...) | Одно или больше чисел. (- 5) возвращает -5, (/ 4) возвращает 1/4 | E302 нет аргументов; 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, не поддерживаются.
Связанные страницы
Раздел Точные и приближённые числа объясняет смешанную арифметику и вывод результатов. Другие группы процедур перечислены в указателе процедур.