Types 实数据类型fortran 90
一个简单的问题。那里也有一个类似的问题,但我没有得到我想要的确切答案 我只是检查fortran 90中实际数据类型的限制(使用ifort编译器),原因是我的实际代码可能会达到该限制。为了测试,我只需给出一个参数mval1(参见代码)并乘以2。在ifort手册中,它说它可以接受的最大值是10E38,而我的值比这个小得多。但在打印时,它会在末尾随机抽取数字(输出在底部给出)。有人能帮我度过这段时间吗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
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浮点数,英特尔Fortranreal(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浮点数,英特尔Fortranreal(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浮点数,英特尔Fortranreal(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浮点数,英特尔Fortranreal(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个数字,但仍然不起作用。不可能是该数字的直接重复。可能是其他人,没时间搜索。这里的问题是分配