Fortran Coder

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

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

[复制链接]

3

帖子

1

主题

0

精华

入门

F 币
36 元
贡献
17 点
跳转到指定楼层
楼主
发表于 2019-8-23 14:02:51 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式
[Fortran] 纯文本查看 复制代码
program ex0408
real a,b
a=1000
b=0.1
write(*,*)  a,"+",b,"=",a+b
stop
end



编译运行结果如下:
pcx@ubuntu:~/a/ab$ vim ex0408.f90
pcx@ubuntu:~/a/ab$ gfortran ex0408.f90
pcx@ubuntu:~/a/ab$ ./a.out
   1000.00000     +  0.100000001     =   1000.09998  


为什么我给b赋值0.1,但在运行的时候b变成了超过单精度浮点数有效位的0.100000001.
还望大佬们能给萌新解释一下。

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

3

帖子

1

主题

0

精华

入门

F 币
36 元
贡献
17 点
沙发
 楼主| 发表于 2019-8-27 21:09:39 | 显示全部楼层
li913 发表于 2019-8-23 15:02
我用ivf,没这个情况,但gfortran的确是这样,搞不懂。

感谢回复。可能是精度的问题,我查了一下,对gfortran编译器来说,0.1和0.1d0是两个不同的数字,我把这个程序 第4行改成:b=0.1d0以后,输出结果精度高了很多:   
1.0000000000000000      +  0.10000000000000001      =   1.1000000000000001      b=  0.10000000000000001  

因为导师让我在Ubuntu环境下编程,所以用不了ivf,感觉ivf的编译器更人性化一点。

3

帖子

1

主题

0

精华

入门

F 币
36 元
贡献
17 点
板凳
 楼主| 发表于 2019-9-2 08:42:09 | 显示全部楼层
vvt 发表于 2019-8-28 08:04
精度肯定影响这个问题的。
不只是 0.1 和 0.1d0 不一样(常量的精度),变量也需要定义为相同的精度类型(k ...

非常感谢
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-5 04:18

Powered by Tencent X3.4

© 2013-2024 Tencent

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