Avançar para o conteúdo principal

Aparentes erros com ponto flutuante

Aparentes erros com ponto flutuante

O que aparenta ser um erro, será mesmo?

Na imagem seguinte, saliento os cálculos, em que supostamente o resultado está impreciso:

O programa, tendo por base o ponto 1, e diminuindo no eixo dos x 10 metros, deveria apresentar uma coordenada x para o ponto 2 de -10.00000 no entanto apresenta -9.99999 porque isto ocorre?

Simplesmente porque o programa está a usar números flutuantes, que como se sabe, são optimos para representar grandes números e para a rapidez do cálculo.

No seguinte extracto do código, vê-se que estou a transformar a string introduzida no campo horizontal para um número flutuante:


A solução passa por saber que os dados serão números até um certo limite, e que eventualmente poderemos usar em vez de float um outro tipo de números/variáveis. No caso em que estou a trabalhar existe uma biblioteca para lidar com números decimais, cujo resultado será o  -10.0000 esperado.

Há que ter, se possível um sentido crítico, e buscar alternativas para atingir o resultado esperado.



Comentários

Mensagens populares deste blogue

ISPOL - Representação de Gabaris

ISPOL - Representação de Gabaris No ISPOL podemos representar ao longo do traçado um contorno e até realizar variações. A representação de um contorno ou gabari pode ser realizada no ISPOL de um modo simples, usando por exemplo um Símbolo (bloco) da biblioteca, ou um ou vários criados à medida para atender aos casos necessários. Na imagem abaixo um exemplo da biblioteca do ISPOL, representado no perfil transversal. Estas secções são constituídas por símbolos/blocos: Podem-se desenhar ao longo do eixo proporcionando a vista típica destas situações, uma espécie de sólido que enche o traçado. Além desta representação "simples" o ISPOL permite realizar transições entre símbolos diferentes, por exemplo para representar os diferentes gabaris em recta e curva. Ou outras situações que se achem necessárias. Permite ainda condicionar a representação destes símbolos por valores de raio. Isto é para um determinado raio. Pode ser usado para indicar de forma automática ao programa que em r...

Python - Automatização em ISPOL

Python - Automatização em ISPOL Com o uso de PyAutoGui podemos automatizar tarefas repetitivas no ISPOL ISTRAM. No trabalho actual, é necessário converter mais de 300 ficheiros. Já houve um trabalho prévio de ler e transformar dados de directrizes em Excel para ficheiros compatíveis com a conversão presente. Este trabalho prévio foi também feito com programação. Tendo os muitos ficheiros com formato TXT que o ISPOL pode ler e converter para CEJ, é necessário ir ao menu de Conversores do ISTRAM e digitar os dados para ler a localização dos ficheiros, número de eixo etc... um trabalho repetitivo. Sendo repetitivo uma hipótese que deve surgir é se existe forma de automatizar / programar. O ISTRAM ISPOL não permite o uso de plugins (como o CAD), por tanto a via seria pela automatização dos movimentos. O pacote PyAutoGUI para Python permite esta simulação de movimentos. https://pyautogui.readthedocs.io/en/latest/ Basicamente "guiamos" o cursor para onde deve clicar e o que introdu...

Python - Larguras de vias em Excel para ISPOL

Python - Larguras de vias em Excel para ISPOL Uma das formas de organizar a informação é usar o Excel. O ISPOL sendo um software em que muita informação é indicada de forma paramétrica, pode gerar alguma dificuldade ou confusão, quando há muitos dados. É o caso das larguras de vias, quando há vias de aceleração ou abrandamento, e diversas situações de vias adicionais. Uma forma de contornar alguma dificuldade é organizar a informação em quadros Excel. O Excel não comunica com o ISPOL, por isso arranja-se um canal de comunicação, a programação em Python. Com alguma experiência na programação, criar um script que realize o que pretendemos não leva assim tanto tempo. Como primeiro passo, ter um ficheiro de Excel com a informação estruturada. Os dados principais podem ser introduzidos com leituras de PKDist do ISPOL e copiados para o Excel. Pode-se ter umas fórmulas nas células para calcular as transições. Cada folha de Excel é relacionada a um eixo. O script ao início pede o número de eix...