Undefinierter Verweis auf 'qcos_' und '_g95_qcos_r16' mit vierfacher Genauigkeit in G95
Frage
Ich habe versucht, bei FORTRAN[real(kind=16)] eine Quad-Präzision zu erreichen, erhalte aber ständig eine Fehlermeldung
C:\User\User\AppData\Local\Temp/ccUMY6b.0:forcefunction.f95:(.text+0x437):
undefined reference to 'qcos_'
Ich habe versucht, mich zu ändern qcos
Zu cos
Aber,
C:\User\User\AppData\Local\Temp/ccM5CBUM.0:forcefunction.f95:(.text+0x2fd1):
undefined reference to '_g95_qcos_r16'
Gleiches Problem für sin
, abs
, acos
, asin
, sqrt
Lösung
kind=16
ist nicht unbedingt Quad-Präzision.Kind-Werte werden nicht durch den Sprachstandard definiert und sind nicht über Compiler hinweg portierbar.Sechzehn ist möglicherweise nicht der richtige Wert für die Quad-Präzision auf Ihrem Compiler.
Nicht alle Compiler unterstützen Quad-Präzision auf allen Architekturen.Sie können dies überprüfen, indem Sie die folgenden Werte ausdrucken:
selected_real_kind (14)
selected_real_kind (17)
selected_real_kind (32)
Der erste verlangt eine doppelte Genauigkeit, der nächste eine mittlere Genauigkeit (10 Bytes), die manchmal auf Intel-Prozessoren verfügbar ist, und der letzte vierfache.Wenn der Compiler die angeforderte Anzahl von Dezimalstellen nicht unterstützt, wird die selected_real_kind
Die Funktion wird zurückgegeben -1
.
Andere Tipps
Ich kann Ihr Problem auf meinem System mit g95 4.0.3 bestätigen.
Laut diesem Thread http://coding.derkeiler.com/Archive/Fortran/comp.lang.fortran/2009-02/msg00668.html Die intrinsischen Funktionen sind noch nicht für Quad-Präzision implementiert.Daher müssen Sie den Compiler ändern oder nur die doppelte Genauigkeit verwenden.