Patrocinado por
Patrocinado por Inetum

Matemática problemática

images/thumbnail.jpg - Thumbnail

Sabes a diferença entre um mistério e um enigma? Num enigma sabe-se que há uma solução mas esta não é conhecida; já num mistério, não se sabe se haverá solução.

Concordas com isto? 5 * 3 / 10 = ( 5 * 3 ) / 10 = 5 * ( 3 / 10 ) = 1.5

Se não concordas, devias concordar porque é um facto matemático.

Mas vamos lá fazer umas experiências.

Experimenta correr o seguinte código:

DATA val TYPE i.
val = ( 5 * 3 ) / 10.
WRITE val.

O resultado no ecrã é 1. Porquê? Simples. Porque a variável é do tipo integer e por isso só guarda a parte inteira. Se mudares o tipo da variável de integer para float , alívio, o ecrã já mostra 1.5.

Experimenta agora correr o seguinte código:

DATA val TYPE i.
val = 5 * ( 3 / 10 ).
WRITE val.

O resultado no ecrã é 0. Estaremos nós perante um mistério? Ou apenas um enigma?

Sei de pessoas que começaram a acreditar em Deus por menos!

Mas o que se passa aqui é simples. É que em ABAP os resultados dos cálculos intermédios, neste caso a divisão 3/10, são igualmente guardados numa variável inteira. Ou seja: 3/10=0.333 convertido para inteiro fica 0. Depois 5*0=0. Mais uma vez, se a variável fosse do tipo float o resultado seria 1.5.

Pronto. Está o enigma resolvido. Ufa! Não era nenhum mistério afinal.

Obrigado Miguel Jorge.

O Abapinho saúda-vos.