2.1.1.1. Números Enteros y Reales

ENTEROS

Son números sin separador decimal. Los enteros de AutoLISP sonnúmeros de 32 bits con signo cuyos valores están comprendidosentre +2.147.483.648 y -2.147.483.647. Aunque AutoLISPutiliza internamente valores de 32 bits, los que se transmiten de AutoLISP aAutoCAD y viceversa están limitados a 16 bits. Por tanto, no puedentransmitirse 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 1deben empezar por cero. Los números reales se almacenan en formato decoma flotante de doble precisión, lo cual proporciona unaprecisió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 (porejemplo, 0.0000041 es lo mismo que 4.1e-6). El símbolopi 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 unnúmero real.

CONSIDERACIONES SOBRE LA CONVERSIÓN ENTRE NÚMEROS REALES YENTEROS

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

Steele menciona en CLTL2 otras posibilidades de conversión entrereales 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 dosenteros (es decir, en la forma entero + 0.5), entonces se redondea al enteropar más próximo (divisible por 2).

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

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