[firebase-br] Integer overflow durante operação aritmética

Rodrigo A. de Freitas rodrigo em solucoeseinformatica.com.br
Ter Out 31 16:30:08 -03 2006


Salve pessoal da lista!

Estou com o seguinte problema:

Eu tenho uma SP (usando FB 1.5.3, dialeto 3) que efetua diversas rotinas
após a emissão do cheque. Dentre essas rotinas, eu tenho uma em específico
que me gera um lançamento contábil, e em determinado momento eu preciso
fazer um cálculo de proporcionalidade em um valor.

O problema é que, para que o cálculo me retorne o valor correto, eu
preciso utilizar TODAS as casas decimais possíveis. Para tanto, eu
declarei a variável CTB_VALOR_RATEADO como FLOAT. ex.:

/* RATEIA O VALOR PROPORCIONALMENTE AO VALOR PAGO DO TÍTULO */

CTB_VALOR_RATEADO = (VALOR / VALOR_TOTAL);
CTB_VALOR_PAGO = (CTB_VALOR * CTB_VALOR_RATEADO);


os campos acima possuem os seguintes valores:

VALOR = 6788,14
VALOR_TOTAL = 19548,80
CTB_VALOR = 19548,80

o resultado da divisão VALOR / VALOR_TOTAL retornado pelo FB é
0,347200006246567.

Problema 1: ao multiplicar o valor obtido pelo conteúdo do campo
CTB_VALOR, o FB me dá o erro "Integer overflow.  The result of an integer
operation caused the most significant bit of the result to carry"

Problema 2: o resultado da divisão é incorreto; O cálculo deveria ter dado
0,34724075135046652479947618268129 (testado pela calculadora do windows)

Alguém tem uma pista de porque o FB calculou errado a divisão e porque eu
recebo essa excessão ao multiplicar os valores ?

[]'s

Rodrigo A. de Freitas

Análise & Desenvolvimento
Soluções & Informática







Mais detalhes sobre a lista de discussão lista