Fortran Coder

查看: 11108|回复: 4
打印 上一主题 下一主题

[求助] 学习过程中遇到的一个关于单精度变量的问题

[复制链接]

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
楼主
发表于 2019-8-28 08:04:21 | 显示全部楼层
本帖最后由 vvt 于 2019-8-28 08:14 编辑

精度肯定影响这个问题的。
不只是 0.1 和 0.1d0 不一样(常量的精度),变量也需要定义为相同的精度类型(kind=8之类的)

ivf和gfortran的不同在于:用表控格式输出write(*,*),对单精度(实际只有7位有效数字),gfortran会默认输出9个有效数字。但ivf只默认7个
[Fortran] 纯文本查看 复制代码
program ex0408
real a,b
real(8) a2,b2
a=1000
b=0.1
a2=1000d0
b2=0.1d0
write(*,*)  a,"+",b,"=",a+b
write(*,'(3(f10.5,a))')  a,"+",b,"=",a+b
write(*,'(3(es13.6,a))')  a,"+",b,"=",a+b
write(*,*)  a2,"+",b2,"=",a2+b2
end

所以你感觉ivf和gfortran精度不同而已。
实际上,你查看两者结果的二进制,是一样的。
或者用 es13.6 查看,也是一样的
(楼主可以用ivf和gfortran分别编译运行以上代码,对比查看)
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-5 08:19

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表