Sto cercando un modo a prova di proiettile per convertire le variabili di tipo logico in un tipo reale che funzionerà sia in ifort che in gfortran. Le seguenti opere in ifort, ma non in gfortran:Converti il tipo logico in doppio in Fortran
logical :: a
real :: b
a = .true.
b = dble(a)
L'errore gettato in gfortran è
b = dble(a)
1
Error: 'a' argument of 'dble' intrinsic at (1) must be a numeric type
Ovviamente, .TRUE. dovrebbe mappare a 1.d0 e .false. a 0.d0. Qual è il modo migliore per farlo?
Per quello che vale, se si attiva il controllo standard ifort dovrebbe lamentarsi. Il motivo per cui funziona è che il processore ha un'estensione che consente la conversione implicita di logico in numero intero, quindi lo standard fornisce la conversione da intero a reale. Si noti che quando si dice "ovviamente" la rappresentazione interna di .TRUE. non assomiglierà assolutamente a un valore reale di 1.0, mentre su * alcuni * processori la rappresentazione interna di .TRUE. è esattamente uguale a un valore intero di 1 (in particolare se la logica predefinita e LOGICAL (C_BOOL) sono la stessa rappresentazione). – IanH
. Vero. = -1 è anche comune (tutti i bit in un numero intero impostato su 1, che nel complemento a 2 = -1). – WaywiserTundish