Referência indefinida para 'qcos_' e '_g95_qcos_r16' com precisão quádrupla em G95
Pergunta
Tentei fazer precisão quad em FORTRAN[real(kind=16)], mas continuo recebendo erro
C:\User\User\AppData\Local\Temp/ccUMY6b.0:forcefunction.f95:(.text+0x437):
undefined reference to 'qcos_'
Eu tentei mudar qcos
para cos
mas,
C:\User\User\AppData\Local\Temp/ccM5CBUM.0:forcefunction.f95:(.text+0x2fd1):
undefined reference to '_g95_qcos_r16'
O mesmo problema para sin
, abs
, acos
, asin
, sqrt
Solução
kind=16
não é necessariamente precisão quádrupla.os valores de tipo não são definidos pelo padrão da linguagem e não são portáveis entre compiladores.Dezesseis pode não ser o valor ideal para precisão quádrupla em seu compilador.
Nem todos os compiladores suportam precisão quádrupla em todas as arquiteturas.Você pode verificar imprimindo os seguintes valores:
selected_real_kind (14)
selected_real_kind (17)
selected_real_kind (32)
O primeiro solicita precisão dupla, o próximo uma precisão intermediária (10 bytes) que às vezes está disponível em processadores Intel e o último quádruplo.Se o compilador não suportar o número solicitado de dígitos decimais, o selected_real_kind
função retornará -1
.
Outras dicas
Posso confirmar seu problema em meu sistema com g95 4.0.3.
De acordo com este tópico http://coding.derkeiler.com/Archive/Fortran/comp.lang.fortran/2009-02/msg00668.html as funções intrínsecas ainda não foram implementadas para precisão quad.Portanto, você deve alterar o compilador ou usar apenas precisão dupla.