tutorial significado descargar fortran

descargar - fortran significado



ParĂ¡metro tipo Fortran 90 (4)

Tengo problemas para entender el parámetro kind Fortran 90. Por lo que puedo decir, no determina la precisión (es decir, flotante o doble) de una variable, ni tampoco determina el tipo de una variable.

Entonces, ¿qué determina y para qué es exactamente?


De Portland Group Fortran Reference , el parámetro KIND "especifica una precisión para tipos de datos intrínsecos". Por lo tanto, en la declaración

real(kind=4) :: float32 real(kind=8) :: float64

la variable float64 declarada como un 8-byte real (el antiguo Fortran DOUBLE PRECISION ) y la variable float32 se declara como un 4-byte real (el antiguo Fortran REAL ).

Esto es bueno porque le permite corregir la precisión de sus variables independientemente del compilador y la máquina en la que se está ejecutando. Si está ejecutando un cálculo que requiere más precisión que el tradicional IEEE-precisión simple (que, si está tomando una clase de análisis numérico, es muy probable), pero declara su variable como real :: myVar , Estará bien si el compilador está configurado para predeterminar todos real valores real a doble precisión, pero cambiar las opciones del compilador o mover el código a una máquina diferente con diferentes tamaños predeterminados para real variables real y integer dará lugar a algunas sorpresas posiblemente desagradables (por ejemplo, su iterativo solucionador de matriz explota).

Fortran también incluye algunas funciones que ayudarán a elegir un parámetro KIND para que sea lo que necesita: SELECTED_INT_KIND y SELECTED_REAL_KIND , pero si recién está aprendiendo, no me preocuparía por ellos en este momento.

Como mencionaste que estás aprendiendo Fortran como parte de una clase, también deberías ver esta pregunta en los recursos de Fortran y tal vez mirar los manuales de referencia del conjunto de compiladores que estás utilizando (por ejemplo, Portland Group o Intel): estos son generalmente disponible de forma gratuita.


El TIPO de una variable es una etiqueta entera que le dice al compilador cuál de los tipos soportados debería usar.

Tenga en cuenta que aunque es común que el parámetro KIND sea el mismo que el número de bytes almacenados en una variable de esa KIND, no es requerido por el estándar Fortran.

Es decir, en muchos 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

De manera similar para tipos enteros y lógicos.

(Si fui a excavar, probablemente podría encontrar ejemplos. Busque en el grupo de usenet comp.lang.fortran para encontrar ejemplos. La discusión más informada sobre Fortran se produce allí, con la contribución de algunas personas con mucha experiencia).

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.

Usualmente uso estos tipos, ya que generalmente me dan reales de 4 bytes y 8 bytes:

!--! specific precisions, usually same as real and double precision integer, parameter :: r6 = selected_real_kind(6) integer, parameter :: r15 = selected_real_kind(15)

Entonces, podría declarar una variable como:

real(kind=r15) :: xd

Tenga en cuenta que esto puede causar problemas cuando utiliza programas de lenguaje mixto, 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*8 no estándar pero común real*4 , real*8 etc.

Cuando comienzas con un nuevo compilador, vale la pena mirar los valores de compilación específicos del compilador para que sepas a qué se enfrenta. Busque en la red de kindfinder.f90 un práctico programa que le informará sobre los tipos disponibles para un compilador.


Simplemente expandiendo las otras (muy buenas) respuestas, especialmente la respuesta de Andrej Panjkov :

El TIPO de una variable es una etiqueta entera que le dice al compilador cuál de los tipos soportados debería usar.

Exactamente. Aunque, para todos los tipos numéricos intrínsecos , el parámetro KIND se usa para especificar el " modelo para la representación y el comportamiento de los números en un procesador " (palabras de la Sección 16.5 del estándar), que en la práctica significa su modelo de bits, eso no es lo único que un parámetro KIND puede representar.

Un parámetro KIND para un tipo es cualquier variación en su naturaleza, modelo o comportamiento que esté disponible para que el programador elija en tiempo de compilación. Por ejemplo, para el tipo de carácter intrínseco, el parámetro kind representa los juegos de caracteres disponibles en el procesador (ASCII, UCS-4, ...).

Incluso puede definir sus propias variaciones de modelo / comportamiento en los Tipos Derivados definidos (de Fortran 2003 después). Puede crear un tipo de matriz de transformación y tener una versión con KIND = 2 para espacio 2D (en el que la matriz subyacente sería 3x3) y KIND = 3 para espacio 3D (con una matriz subyacente de 4x4). Solo recuerde que no hay conversión de tipo automático para tipos no intrínsecos.


Sugiero usar Fortran 2008 y posteriores; INT8, INT16, INT32, INT64, REAL32, REAL64, REAL128 . Esto se hace llamando a ISO_FORTRAN_ENV en Fortran 2003 y posterior. Los parámetros tipo proporcionan una forma incoherente de garantizar que siempre obtenga el número apropiado de representación de bits