Я ищу пуленепробиваемый способ преобразования переменных логического типа в реальный тип, который будет работать как в ifort, так и в gfortran. Следующие работы в ifort, но не в gfortran:Преобразование логического типа в double в Fortran
logical :: a
real :: b
a = .true.
b = dble(a)
Ошибка выброшен в gfortran является
b = dble(a)
1
Error: 'a' argument of 'dble' intrinsic at (1) must be a numeric type
Очевидно, .true. должен отображаться на 1.d0 и .false. до 0.d0. Каков наилучший способ сделать это?
Для чего стоит, если вы включите стандартную проверку ifort, следует подать жалобу. Причина, по которой он работает, заключается в том, что процессор имеет расширение, которое допускает неявное преобразование логического в целое число, тогда стандарт предоставляет преобразование из целого в реальное. Обратите внимание, что когда вы говорите «очевидно» внутреннее представление .TRUE. не будет выглядеть абсолютно как реальное значение 1.0, а на * некоторых * процессорах - внутреннее представление .TRUE. точно такое же, как целочисленное значение 1 (особенно если логическое значение по умолчанию и LOGICAL (C_BOOL) являются одинаковым представлением). – IanH
.true. = -1 также является общим (все биты в целочисленном наборе равны 1, что в дополнении 2 = -1). – WaywiserTundish