Преобразование логического типа в double в Fortran
Я ищу пуленепробиваемый способ преобразования переменных логического типа в реальный тип, который будет работать как в ifort, так и в gfortran. Следующие работы в ifort, но не в gfortran:
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
очевидно, .истинный. должна Карта 1.D0 и .ложный. до 0.д0. Как лучше всего это сделать?
3 ответов
Я не уверен, есть ли внутренний инструмент, который делает это. Я не знаю, почему ifort принимает это, и я предполагаю, что это конкретный компилятор функций.
Edit: как указано в https://stackoverflow.com/a/15057846/1624033 ниже, есть внутреннее слияние
в дополнение к написанию функции для обработки этого, вы также можете напрямую использовать встроенную функцию слияния:b = merge(1.d0, 0.d0, a)
. Или вы можете написать определенную подпрограмму назначения, которая делает это, так что вы можете просто ввести b = a
.
в gfortran я использую внутреннюю передачу для этого типа задания. Предполагая целочисленную переменную my_int тогда:
my_int = transfer(.false.,my_int)
результат my_int равен 0, как и ожидалось.