Recentemente, encontrei um problema bizarro com FORTRAN95. Inicializei as variáveis X e Y da seguinte maneira:

X=1.0 Y=0.1 

Mais tarde, eu os adiciono e imprimo o resultado:

1.10000000149012 

Depois de examinar as variáveis, parece que 0,1 não é representado em precisão dupla com precisão total. Existe alguma maneira de evitar isso?

Resposta

Outra maneira de fazer isso é primeiro especificar explicitamente a precisão que você deseja na variável usando o SELECTED_REAL_KIND intrínseco e, em seguida, usar isso para definir e inicializar as variáveis. :

INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(15) REAL(dp) :: x x = 1.0_dp 

Uma boa vantagem de fazer desta forma é que você pode armazenar a definição de dp em um módulo, então USE esse módulo onde necessário. Agora, se você quiser alterar a precisão de seu programa, você só precisa alterar a definição de dp naquele lugar, em vez de pesquisar e substituir todos os D0 s no fim de suas inicializações de variáveis. (É também por isso que eu recomendo não usar a sintaxe 1.0D-1 para definir Y conforme sugerido. Funciona, mas torna mais difícil encontrar e alterar todas as instâncias no futuro.)

Esta página no Fortran Wiki fornece algumas boas informações adicionais sobre SELECTED_REAL_KIND.

Comentários

  • Isso ' está certo, esta deve ser a abordagem padrão.
  • E com que frequência as pessoas realmente precisam alterar a precisão de seus programas às cegas, sem passar por procedimento a procedimento e testar? A principal razão para usar o esquema _dp é para que a precisão seja claramente definido de maneira portátil.

Resposta

Você declarou as variáveis como precisão dupla, mas as inicializou com valores de precisão simples.

Você poderia ter escrito:

X=1.0d0 Y=1.0d-1 

Barron “s responder abaixo está outra maneira de fazer uma precisão dupla literal, com a vantagem de permitir que você altere a precisão de suas variáveis posteriormente.

Comentários

  • Acho que se deveria usar o método 1.0_dp descrito na postagem abaixo.
  • Segundo @ OndřejČert í k ' comentário – Barron ' a resposta é a melhor.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *