Fortran Coder

查看: 145|回复: 3

[数值问题] Fortran95 彭老师教材例题

[复制链接]

8

帖子

5

主题

0

精华

入门

F 币
37 元
贡献
21 点
发表于 2024-6-29 16:06:34 | 显示全部楼层 |阅读模式
这照着书输入怎么还不一样呢,1+0.1还能算错。。。。
974b2036ee46e05d60ddde1e503ac76.png

718

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
631 元
贡献
323 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

发表于 2024-6-29 16:26:14 | 显示全部楼层
本帖最后由 楚香饭 于 2024-6-29 16:28 编辑

浮点数有误差很正常。
就像你在计算器上输入 1 除以3 再乘以3,很可能是 0.99999999 一样。
计算机普遍采用二进制,而二进制不能精确的表达 十分之一(0.1),正如十进制不能准确的表达 三分之一 (0.333333333....) 一样

8

帖子

5

主题

0

精华

入门

F 币
37 元
贡献
21 点
 楼主| 发表于 2024-6-29 16:58:46 | 显示全部楼层
楚香饭 发表于 2024-6-29 16:26
浮点数有误差很正常。
就像你在计算器上输入 1 除以3 再乘以3,很可能是 0.99999999 一样。
计算机普遍采用 ...

厉害 一下子明白了  那我想和教材例题一样输出1.100000的话,有没有方法可以实现呢

718

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
631 元
贡献
323 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

发表于 2024-6-29 19:27:39 | 显示全部楼层
对单精度 real 来说,有效精度在 6.9 位左右,不到 7 位。
教材用的是 compaq visual fortran。你用的是 gfortran
前者对表控格式默认输出 6 位有效数字,而后者默认更多位。

你只需要用格式输出,只输出6位有效数字就可以“避开”这个问题。

write(*,'(f7.5,"+",f7.5,"=",f7.5)') a , b , a+b
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-7-23 19:06

Powered by Tencent X3.4

© 2013-2024 Tencent

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