Literales

Los literales son valores constantes que forman la base de todos los valores que pasan a FormCalc para ser procesados. Los dos tipos generales de literales son números y cadenas.

Literales numéricos

Un literal numérico es una secuencia compuesta principalmente de dígitos que consta de uno o varios de los siguientes caracteres: un número entero, un punto decimal, un segmento de fracción, un indicador exponencial (“e” o “E”) y un valor exponencial que puede estar firmado. Ejemplos de números de literal:

  • -12

  • 1.5362

  • 0.875

  • 5.56e-2

  • 1.234E10

Es posible omitir el número entero o el segmento de fracción de un número de literal, pero no ambos. Además, dentro del segmento de fracción, es posible omitir el punto decimal o el valor exponencial, pero no ambos.

Todos los literales numéricos se convierten internamente a valores binarios de 64 bits del Institute of Electrical and Electronics Engineers (IEEE, Instituto de Ingeniería Eléctrica y Electrónica). Sin embargo, los valores de IEEE solo pueden representar una cantidad finita de números, por lo que algunos valores no tienen representación en forma de fracción binaria. Este fenómeno es similar al hecho de que algunos valores, como 1/3, no tienen una representación precisa como fracción decimal (el valor decimal necesitaría un número infinito de decimales para que fuera realmente preciso).

Estos valores que no tienen un equivalente en fracción binaria suelen ser literales numéricos con más de 16 dígitos significativos antes del exponente. FormCalc redondea estos valores al valor de IEEE de 64 bits más cercano, de acuerdo con la norma de IEEE. Por ejemplo, el valor:

    123456789.012345678

se redondea al valor (más cercano):

    123456789.01234567

Sin embargo, en un segundo ejemplo, el literal numérico:

    99999999999999999 

se redondea al valor (más cercano):

    100000000000000000

Este comportamiento puede dar lugar a resultados sorprendentes. FormCalc proporciona una función, Round, que devuelve un valor dado redondeado a un número determinado de decimales. Cuando el número dado está justo a medio camino entre dos números representables, se redondea hacia el valor más alejado de cero. Es decir, el número se redondea por exceso si es positivo y por defecto si es negativo. En el ejemplo siguiente:

    Round(0.124, 2)

devuelve 0.12,

y

    Round(.125, 2)

devuelve 0.13.

Debido a esta norma, se podría esperar que:

    Round(0.045, 2)

devuelve 0.05.

Sin embargo, la norma 754 de IEEE dictamina que el literal numérico 0.045 se aproxime a 0.0449999999999999. Esta aproximación está más cerca de 0.04 que de 0.05. Por tanto,

    Round(0.045, 2)

devuelve 0.04.

Esto cumple también la norma 754 de IEEE.

Los valores de IEEE de 64 bits admiten representaciones como NaN (no es un número), +Inf (infinito positivo) e -Inf (infinito negativo). FormCalc no los admite y las expresiones cuya evaluación genera NaN, +Inf o -Inf dan como resultado una excepción de error, que se traslada al resto de la expresión.

Literales de cadena

Un literal de cadena es una secuencia de caracteres Unicode enmarcadas por comillas. Por ejemplo:

    "The cat jumped over the fence." 
    "Number 15, Main street, California, U.S.A"

El literal de cadena "" define una secuencia vacía de caracteres de texto que se denomina cadena vacía.

Para incrustar un carácter de comillas (") dentro de una cadena de literal, debe insertar dos comillas. Por ejemplo:

    "The message reads: ""Warning: Insufficient Memory"""

Todos los caracteres Unicode tienen una secuencia de escape de seis caracteres equivalente formada por \u y cuatro dígitos hexadecimales. En cualquier cadena de literales es posible expresar todos los caracteres, incluyendo los caracteres de control, con la secuencia de escape Unicode equivalente. Por ejemplo:

    "\u0047\u006f\u0066\u0069\u0073\u0068\u0021" 
    "\u000d" (carriage return) 
    "\u000a" (newline character)