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 实数据类型fortran 90_Types_Fortran_Fortran90_Real Datatype - Fatal编程技术网

Types 实数据类型fortran 90

Types 实数据类型fortran 90,types,fortran,fortran90,real-datatype,Types,Fortran,Fortran90,Real Datatype,一个简单的问题。那里也有一个类似的问题,但我没有得到我想要的确切答案 我只是检查fortran 90中实际数据类型的限制(使用ifort编译器),原因是我的实际代码可能会达到该限制。为了测试,我只需给出一个参数mval1(参见代码)并乘以2。在ifort手册中,它说它可以接受的最大值是10E38,而我的值比这个小得多。但在打印时,它会在末尾随机抽取数字(输出在底部给出)。有人能帮我度过这段时间吗 PROGRAM TEST IMPLICIT NONE REAL(KIND=8), PARA

一个简单的问题。那里也有一个类似的问题,但我没有得到我想要的确切答案

我只是检查fortran 90中实际数据类型的限制(使用ifort编译器),原因是我的实际代码可能会达到该限制。为了测试,我只需给出一个参数mval1(参见代码)并乘以2。在ifort手册中,它说它可以接受的最大值是10E38,而我的值比这个小得多。但在打印时,它会在末尾随机抽取数字(输出在底部给出)。有人能帮我度过这段时间吗

PROGRAM TEST

  IMPLICIT NONE
  REAL(KIND=8), PARAMETER :: mval1 = 1073E12
  REAL(KIND=8) :: j
  j = real(2*mval1)
  PRINT *, j,mval1

END PROGRAM TEST
输出

 2.146000005234688E+015  1.073000002617344E+015

在你已有的评论中,有两点需要补充

一:在英特尔Fortran
real(kind=8)
中,变量与IEEE-754双精度数字相同,最大正值为
1.797693134862316E+308
。对于单精度IEEE浮点数,英特尔Fortran
real(kind=4)
,最大值为
3.4028235E+38
,约为您的
10E38

第二:你的声明

REAL(KIND=8), PARAMETER :: mval1 = 1073E12
mval1
指定默认实数类型的值。我不知道您的默认编译器设置是什么,但请检查如果将该行更改为

REAL(KIND=8), PARAMETER :: mval1 = 1073E12_8
它明确声明文本的种类为
kind=8


对于这个你不太想问的问题,你的答案是:浮点运算很棘手,使用它的程序员至少应该熟悉基本的技巧。数字和算术是自我教育的良好起点。不管别人告诉你什么,忽略戈德堡的论文——每个计算机科学家都应该知道的关于浮点运算的知识,直到你开始尝试实现自己的浮点数和算术。

在你已有的评论中再补充两点

一:在英特尔Fortran
real(kind=8)
中,变量与IEEE-754双精度数字相同,最大正值为
1.797693134862316E+308
。对于单精度IEEE浮点数,英特尔Fortran
real(kind=4)
,最大值为
3.4028235E+38
,约为您的
10E38

第二:你的声明

REAL(KIND=8), PARAMETER :: mval1 = 1073E12
mval1
指定默认实数类型的值。我不知道您的默认编译器设置是什么,但请检查如果将该行更改为

REAL(KIND=8), PARAMETER :: mval1 = 1073E12_8
它明确声明文本的种类为
kind=8


对于这个你不太想问的问题,你的答案是:浮点运算很棘手,使用它的程序员至少应该熟悉基本的技巧。数字和算术是自我教育的良好起点。不管别人告诉你什么,忽略戈德堡的论文——每个计算机科学家都应该知道的关于浮点运算的知识,直到你开始尝试实现自己的浮点数和算术。

在你已有的评论中再补充两点

一:在英特尔Fortran
real(kind=8)
中,变量与IEEE-754双精度数字相同,最大正值为
1.797693134862316E+308
。对于单精度IEEE浮点数,英特尔Fortran
real(kind=4)
,最大值为
3.4028235E+38
,约为您的
10E38

第二:你的声明

REAL(KIND=8), PARAMETER :: mval1 = 1073E12
mval1
指定默认实数类型的值。我不知道您的默认编译器设置是什么,但请检查如果将该行更改为

REAL(KIND=8), PARAMETER :: mval1 = 1073E12_8
它明确声明文本的种类为
kind=8


对于这个你不太想问的问题,你的答案是:浮点运算很棘手,使用它的程序员至少应该熟悉基本的技巧。数字和算术是自我教育的良好起点。不管别人告诉你什么,忽略戈德堡的论文——每个计算机科学家都应该知道的关于浮点运算的知识,直到你开始尝试实现自己的浮点数和算术。

在你已有的评论中再补充两点

一:在英特尔Fortran
real(kind=8)
中,变量与IEEE-754双精度数字相同,最大正值为
1.797693134862316E+308
。对于单精度IEEE浮点数,英特尔Fortran
real(kind=4)
,最大值为
3.4028235E+38
,约为您的
10E38

第二:你的声明

REAL(KIND=8), PARAMETER :: mval1 = 1073E12
mval1
指定默认实数类型的值。我不知道您的默认编译器设置是什么,但请检查如果将该行更改为

REAL(KIND=8), PARAMETER :: mval1 = 1073E12_8
它明确声明文本的种类为
kind=8


对于这个你不太想问的问题,你的答案是:浮点运算很棘手,使用它的程序员至少应该熟悉基本的技巧。数字和算术是自我教育的良好起点。不管别人告诉你什么,只要你开始尝试实现自己的浮点数和算术,就不要理会戈德堡的论文——每个计算机科学家都应该知道的关于浮点数算术的知识。

你看到了与浮点数相关的精度损失。请参阅或在《英特尔编译器手册》中,它表示实数的小数精度为15-17(种类=8)。我正在看第9个数字,但仍然不起作用。不可能是该数字的直接重复。可能是其他人,没时间搜索。这里的问题是分配