Tôi đang tìm cách chống đạn để chuyển đổi các biến loại logic thành kiểu thực sẽ hoạt động trong cả ifort và gfortran. Các công trình sau đây trong ifort, nhưng không trong gfortran:Chuyển đổi loại hợp lý thành gấp đôi trong Fortran
logical :: a
real :: b
a = .true.
b = dble(a)
Lỗi ném vào gfortran là
b = dble(a)
1
Error: 'a' argument of 'dble' intrinsic at (1) must be a numeric type
Rõ ràng, .true. nên ánh xạ tới 1.d0 và .false. đến 0.d0. Cách tốt nhất để làm điều này là gì?
Đối với giá trị của nó, nếu bạn bật ifort kiểm tra chuẩn nên khiếu nại. Lý do nó hoạt động là bộ xử lý có một phần mở rộng cho phép chuyển đổi ngầm của lô-gic thành số nguyên, tiêu chuẩn sau đó cung cấp cho việc chuyển đổi từ số nguyên sang thực. Lưu ý rằng khi bạn nói "rõ ràng" biểu diễn bên trong của .TRUE. sẽ trông hoàn toàn không có gì giống như giá trị thực 1.0, trong khi trên * một số bộ xử lý * biểu diễn bên trong của .TRUE. là chính xác giống như giá trị số nguyên của 1 (đặc biệt nếu logic mặc định và LOGICAL (C_BOOL) là cùng một biểu diễn). – IanH
. = -1 cũng là phổ biến (tất cả các bit trong một số nguyên được đặt thành 1, trong phần bù của 2 = -1). – WaywiserTundish