El KIND de una variable es una etiqueta entera que le dice al compilador cuál de los tipos soportados debería usar.
Mira que aunque es común para el parámetro de tipo en ser el mismo que el número de bytes almacenados en una variable de este tipo, es no requiere por la norma Fortran.
Esto es, en una gran cantidad de sistemas,
REAl(KIND=4) :: xs ! 4 byte ieee float
REAl(KIND=8) :: xd ! 8 byte ieee float
REAl(KIND=16) :: xq ! 16 byte ieee float
pero puede haber compiladores por ejemplo con:
REAL(KIND=1) :: XS ! 4 BYTE FLOAT
REAL(KIND=2) :: XD ! 8 BYTE FLOAT
REAL(KIND=3) :: XQ ! 16 BYTE FLOAT
Del mismo modo para número entero y tipos lógicos.
(Si fui cavando, probablemente podría encontrar ejemplos. Buscar en el comp.lang.fortran grupo Usenet para kind
para encontrar ejemplos. La discusión más informada de Fortran se produce allí, con algunas personas de gran experiencia que contribuye.)
Entonces, si no puede contar con un valor de tipo particular que le brinde la misma representación de datos en diferentes plataformas, ¿qué hace?Para eso son las funciones intrínsecas SELECTED_REAL_KIND
y SELECTED_INT_KIND
. Básicamente, le dice a la función qué tipo de números necesita representar, y devolverá el tipo que necesita usar.
que suelen utilizar este tipo, ya que por lo general me dan 4 bytes y 8 reales de bytes:
!--! specific precisions, usually same as real and double precision
integer, parameter :: r6 = selected_real_kind(6)
integer, parameter :: r15 = selected_real_kind(15)
por lo que podría declarar posteriormente una variable como:
real(kind=r15) :: xd
Tenga en cuenta que esto puede causar problemas en los que utiliza programas de idiomas mixtos, y necesita especificar absolutamente el número de bytes que ocupan las variables. Si necesita asegurarse, hay aspectos intrínsecos a la consulta que le informarán sobre cada tipo, a partir de los cuales puede deducir la huella de memoria de una variable, su precisión, rango de exponente, etc. O bien, puede volver al estilo de declaración real*4
, real*8
, etc. no estándar pero común.
Cuando empiezas con un nuevo compilador, vale la pena mirar los valores de compilación específicos para que sepas a qué se enfrenta. Busque en la red kindfinder.f90
para obtener un programa útil que le informará sobre los tipos disponibles para un compilador.
¿Se refiere a la notación Kind? – TStamper