Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Types 固有类型与基本非固有类型_Types_Fortran_Primitive_Primitive Types - Fatal编程技术网

Types 固有类型与基本非固有类型

Types 固有类型与基本非固有类型,types,fortran,primitive,primitive-types,Types,Fortran,Primitive,Primitive Types,我在fortran中遇到了“固有类型”这个词,我以前从未听说过: Fortran有五种内在数据类型:整数、实数、复数、逻辑和字符 内在与“原始”是同一事物,还是在意义上有细微差别?内在类型(我可以想象类似日期或十进制的东西)的反面是什么:它将被称为什么?Fortran标准将内在类型(通常,不仅仅是类型)定义为: 1.3.93 固有的 ISO/IEC 153917本部分中定义且无需进一步定义或规范即可访问的类型、程序、模块、分配、操作员或输入/输出操作,或处理器提供但ISO/IEC 1539本部分

我在fortran中遇到了“固有类型”这个词,我以前从未听说过:

Fortran有五种内在数据类型:整数、实数、复数、逻辑和字符

内在与“原始”是同一事物,还是在意义上有细微差别?内在类型(我可以想象类似日期或十进制的东西)的反面是什么:它将被称为什么?

Fortran标准将内在类型(通常,不仅仅是类型)定义为:

1.3.93

固有的

ISO/IEC 153917本部分中定义且无需进一步定义或规范即可访问的类型、程序、模块、分配、操作员或输入/输出操作,或处理器提供但ISO/IEC 1539本部分中未定义的程序或模块

此外,它对固有类型的定义如下:

1.3.147.8

固有类型

ISO/IEC 1539本部分定义的类型,可随时访问

因此,内部类型和派生类型之间的主要区别在于,必须导入库才能使用最后一个库。(我之前已经从
ISO_FORTRAN_ENV
库中使用real(real64)制作了一个非内在的示例,但正如francescalus在评论中指出的那样,情况并非如此。)

您可能还想查看标准的会话4.4,该会话专门详细讨论了内部类型。Fortran标准是非官方的,不是最新的,但作为Fortran哲学的一部分,最新的标准与旧标准是一致的

我在Fortran标准中没有找到任何与
原语
匹配的名称,因此我相信Fortran中没有使用这个术语。我还检查了C标准,没有找到任何正式的定义,但我在其他语言中找到的每个术语定义(例如在Java中)基本上都将其定义为该语言附带的类型,即内在的。:)


也许您要寻找的区别是,尽管在Fortran中,
real
是一种固有类型,但双精度不是:

实数类型的类型说明符使用关键字real。关键字DOUBLE PRECISION是一种实数类型的替代说明符。如果使用的type关键字REAL没有种类类型参数,则指定具有默认实数种类的实数类型,并且种类值为种类(0.0)。类型说明符DOUBLE PRECISION使用双精度种类指定类型real;种类值为种类(0.0D0)。双精度实数近似法的小数精度应大于默认实数法的小数精度

但是,在其他语言中,诸如
short
long
之类的类型可以理解为不同的原语。

Fortran标准将内部(通常,不仅仅是类型)定义为:

1.3.93

固有的

ISO/IEC 153917本部分中定义且无需进一步定义或规范即可访问的类型、程序、模块、分配、操作员或输入/输出操作,或处理器提供但ISO/IEC 1539本部分中未定义的程序或模块

此外,它对固有类型的定义如下:

1.3.147.8

固有类型

ISO/IEC 1539本部分定义的类型,可随时访问

因此,内部类型和派生类型之间的主要区别在于,必须导入库才能使用最后一个库。(我之前已经从
ISO_FORTRAN_ENV
库中使用real(real64)制作了一个非内在的示例,但正如francescalus在评论中指出的那样,情况并非如此。)

您可能还想查看标准的会话4.4,该会话专门详细讨论了内部类型。Fortran标准是非官方的,不是最新的,但作为Fortran哲学的一部分,最新的标准与旧标准是一致的

我在Fortran标准中没有找到任何与
原语
匹配的名称,因此我相信Fortran中没有使用这个术语。我还检查了C标准,没有找到任何正式的定义,但我在其他语言中找到的每个术语定义(例如在Java中)基本上都将其定义为该语言附带的类型,即内在的。:)


也许您要寻找的区别是,尽管在Fortran中,
real
是一种固有类型,但双精度不是:

实数类型的类型说明符使用关键字real。关键字DOUBLE PRECISION是一种实数类型的替代说明符。如果使用的type关键字REAL没有种类类型参数,则指定具有默认实数种类的实数类型,并且种类值为种类(0.0)。类型说明符DOUBLE PRECISION使用双精度种类指定类型real;种类值为种类(0.0D0)。双精度实数近似法的小数精度应大于默认实数法的小数精度


但是,在其他语言中,诸如
short
long
之类的类型可以理解为不同的原语。

内部类型是由Fortran标准定义并始终可访问的数据类型之一(rvbarreto的答案包含一个明确的定义引号)。截至2018年Fortran,这是问题的五个方面


在Fortran 90引入种类参数系统之前,存在类型
双精度
,但这现在不是一种不同的内在类型:它指的是具有特定种类参数的内在类型
实型

与内在类型不同的是类似的东西:一个总是可以访问但由特定处理器(编译器)定义的类型。一个例子可以是
字节
数据类型

此外,还有衍生数据
type :: date
   real :: seconds_since_epoch
end type date

type :: decimal(digits)
   integer, kind :: digits
   integer :: value(digits)
end type decimal
real a ! Intrinsic
byte b ! Non-standard 'primitive' perhaps (if supported)
type(byte) c ! Derived type, non-standard/user
type(c_ptr) d ! Standard (if referring to that of iso_c_binding)
type(real) e ! Intrinsic!
double precision f ! Intrinsic (real)