2.1.1.1. Números Enteros y Reales

ENTEROS

Son números sin separador decimal. Los enteros de AutoLISP son números de 32 bits con signo cuyos valores están comprendidos entre +2.147.483.648 y -2.147.483.647. Aunque AutoLISP utiliza internamente valores de 32 bits, los que se transmiten de AutoLISP a AutoCAD y viceversa están limitados a 16 bits. Por tanto, no pueden transmitirse a AutoCAD valores superiores a +32767 ni inferiores a -32768.

Sin embargo, VLISP acepta valores fixnum entre los valores límite de:

  • MAX-SHORTINT = 32767
  • MOST-POSITIVE-FIXNUM = 2147483647
  • MOST-NEGATIVE-FIXNUM = -2147483647

Un número mayor o menor se convierte automáticamente en real.

REALES

Contienen un separador decimal. Los comprendidos entre -1 y 1 deben empezar por cero. Los números reales se almacenan en formato de coma flotante de doble precisión, lo cual proporciona una precisión mínima de 14 dígitos significativos, aunque el área de comandos de AutoCAD muestra sólo 6.

Los valores límites son: 
MOST-POSITIVE-DOUBLE-FLOAT = 1.797693134862315e+308
MOST-NEGATIVE-DOUBLE-FLOAT= -1.797693134862315e+308
Un número mayor, devuelve infinito:

 _$ 1.797693134862316e+308
1.#INF
_$ (setq val 1.797693134862316e+308)
1.#INF
_$ (type val)
REAL
_$ (setq *INFINITO* 2.797693134862316e+308)
1.#INF
_$ (eq *INFINITO* val)
T
_$ (/ 125678 *INFINITO*)
0.0

Se puede establecer una variable global *INFINITO* con: (setq *INFINITO* 1.797693134862316e+308) y utilizarlo como tal en operaciones trigonométricas.
Pueden expresarse en notación científica, que consta de una e o E opcional seguida por el exponente del número (por ejemplo, 0.0000041 es lo mismo que 4.1e-6). El símbolo pi se evalúa como la constante real 3,1415...

FUNCIONES DE CONVERSIÓN ENTRE ENTEROS Y REALES:

(fix número)
Devuelve la conversión de un número real en el próximo entero menor.
(float número)
Devuelve la conversión de un número entero en un número real.

CONSIDERACIONES SOBRE LA CONVERSIÓN ENTRE NÚMEROS REALES Y ENTEROS

La función fix en realidad lo que ejecuta es un truncamiento del número real hacia cero. Es decir, devuelve el número entero más próximo a cero. Así (fix 4.7) devolverá 4, es decir, el número entero menor más cercano al suministrado como argumento. Pero (fix -4.7) devolverá -4, que es el entero mayor más cercano. En las definiciones de Common LISP, fix equivaldría a la función truncate.

Steele menciona en CLTL2 otras posibilidades de conversión entre reales y enteros:

floor
convierte su argumento mediante un truncamiento hacia infinito negativo; es decir, que el resultado es el entero mayor que no es mayor que el argumento.
ceiling
convierte su argumento mediante un truncamiento hacia infinito positivo; es decir, que el resultado es el entero menor que no es menor que el argumento.
truncate
convierte su argumento mediante un trucamiento hacia cero; es decir, que el resultado es el entero del mismo signo que el argumento y que posee la mayor magnitud entera que no es mayor que el argumento.
round
convierte su argumento mediante el redondeo al entero más cercano; si el número se encuentra exactamente a mitad de camino entre dos enteros (es decir, en la forma entero + 0.5), entonces se redondea al entero par más próximo (divisible por 2).

Más adelante desarrollaremos funciones para implementar algunos de estos conceptos que no aparecen como primitivas de Visual LISP.*

*Ver el capítulo REALES A ENTEROS: TRUCAMIENTO O REDONDEO.