Literais

Literais são valores constantes que formam a base de todos os valores transmitidos para FormCalc para processamento. Os dois tipos comuns de literais são números e strings.

Literais de número

Um número literal é uma sequência de praticamente dígitos, consistindo em um ou mais dos seguintes caracteres: um inteiro, um ponto decimal, um segmento fracional, um indicador exponente ("e" ou "E") e um valor de exponente atribuído opcionalmente. Estes são todos exemplos de números literais:

  • -12

  • 1.5362

  • 0.875

  • 5.56e-2

  • 1.234E10

É possível omitir o número inteiro ou o segmento de fração de um número literal, mas não ambos. Além disso, no segmento de fração, é possível omitir a vírgula decimal ou o valor de expoente, mas não ambos.

Todos os literais de número são convertidos internamente em valores binários IEEE (Institute of Electrical and Electronics Engineers) de 64 bits. Entretanto, esses valores IEEE podem representar apenas uma quantidade finita de números e, dessa forma, alguns valores não possuem uma representação como fração binária. Isso é semelhante ao fato de certos valores, como 1/3, não possuírem uma representação precisa como fração decimal (o valor decimal precisaria de um número infinito de casas decimais para ser totalmente preciso).

Os valores que não possuem um equivalente em fração binária são, geralmente, literais de número com mais de 16 dígitos significativos antes dos respectivos expoentes. FormCalc arredonda esses valores para o valor IEEE de 64 bits mais próximo que pode ser representado de acordo com o padrão IEEE. Por exemplo, o valor:

    123456789.012345678

é arredondado para o valor (mais próximo):

    123456789.01234567

Entretanto, em um segundo exemplo, o literal de número:

    99999999999999999 

é arredondado para o valor (mais próximo):

    100000000000000000

Em algumas situações, esse comportamento gera resultados inesperados. FormCalc fornece uma função, Round, que retorna um determinado número arredondado para uma quantidade específica de casas decimais. Quando esse número corresponde exatamente à metade de dois números representáveis, ele é arredondado longe do zero. Ou seja, o número será arredondado para cima se for positivo e para baixo se for negativo. No exemplo a seguir:

    Round(0.124, 2)

retorna 0,12

e

    Round(.125, 2)

retorna 0,13.

De acordo com essa convenção, é possível esperar que:

    Round(0.045, 2)

retorna 0.05.

Entretanto, o padrão IEEE 754 estabelece que o literal de número 0,045 seja aproximado para 0,0449999999999999. Essa aproximação está mais próxima de 0,04 do que de 0,05. Portanto,

    Round(0.045, 2)

retorna 0.04.

Isso também está em conformidade com o padrão IEEE 754.

Valores IEEE de 64 bits oferecem suporte para representações como NaN (não é um número), +Inf (infinito positivo) e -Inf (infinito negativo). FormCalc não oferece suporte para esses valores, e uma expressão que resulta em NaN, +Inf ou -Inf gera uma exceção de erro que é transmitida para o restante dessa expressão.

Literais de string

Um literal de string é uma sequência de qualquer caractere Unicode em um conjunto de aspas. Por exemplo:

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

O literal de string "" define uma sequência vazia de caracteres de texto chamada de string vazia.

Para incorporar um caractere de aspas (") dentro de uma string literal, é necessário inserir duas aspas. Por exemplo:

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

Todos os caracteres Unicode possuem uma sequência de escape equivalente de seis caracteres que consiste em \u, seguido por quatro dígitos hexadecimais. Em uma string literal, é possível expressar qualquer caractere, incluindo caracteres de controle, com o uso da sequência de escape Unicode equivalente. Por exemplo:

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