Глава 12
Числа

 12.1 Точность, неявное приведение и явное приведение
 12.2 Предикаты для чисел
 12.3 Сравнение чисел
 12.4 Арифметические операции
 12.5 Иррациональные и трансцендентные функции
  12.5.1 Экспоненциальные и логарифмические функции
  12.5.2 Тригонометрические и связанные с ними функции
  12.5.3 Точки ветвления, главные значения и краевые условия на комплексной плоскости
 12.6 Приведение типов и доступ к компонентам чисел
 12.7 Логические операции над числами
 12.8 Функции для манипуляции с байтами
 12.9 Случайные числа
 12.10 Параметры реализации

Common Lisp содержит несколько различных представлений для чисел. Эти представления могут быть разделены на четыре категории: целые, дробные, с плавающей точкой и комплексные. Большинство функций принимают любой тип числа. Некоторые другие — только определённый тип.

В целом числа в Common Lisp’е не является объектами в прямом понимании слова. Нельзя полагаться, например, на использование eq для чисел. В частности, возможно, что значение выражения

(let ((x z) (y z)) (eq x y))

может быть ложным, а не истинным, если значение z является числом. __________________________________________________________________

Обоснование: This odd breakdown of eq in the case of numbers allows the implementor enough design freedom to produce exceptionally efficient numerical code on conventional architectures. MacLisp requires this freedom, for example, in order to produce compiled numerical code equal in speed to Fortran. Common Lisp makes this same restriction, if not for this freedom, then at least for the sake of compatibility.

__________________________________________________________________________

Если два объекта сравниваются для «идентичности», но один из может быть числом, то использование предиката eql является более подходящим. Если оба объекта являются числами, то преимущество стоит отдать =.