Fortran Coder

标题: Fortran95 彭老师教材例题 [打印本页]

作者: kkluv    时间: 2024-6-29 16:06
标题: Fortran95 彭老师教材例题
这照着书输入怎么还不一样呢,1+0.1还能算错。。。。

974b2036ee46e05d60ddde1e503ac76.png (50.14 KB, 下载次数: 33)

974b2036ee46e05d60ddde1e503ac76.png

作者: 楚香饭    时间: 2024-6-29 16:26
本帖最后由 楚香饭 于 2024-6-29 16:28 编辑

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

作者: kkluv    时间: 2024-6-29 16:58
楚香饭 发表于 2024-6-29 16:26
浮点数有误差很正常。
就像你在计算器上输入 1 除以3 再乘以3,很可能是 0.99999999 一样。
计算机普遍采用 ...

厉害 一下子明白了  那我想和教材例题一样输出1.100000的话,有没有方法可以实现呢
作者: 楚香饭    时间: 2024-6-29 19:27
对单精度 real 来说,有效精度在 6.9 位左右,不到 7 位。
教材用的是 compaq visual fortran。你用的是 gfortran
前者对表控格式默认输出 6 位有效数字,而后者默认更多位。

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

write(*,'(f7.5,"+",f7.5,"=",f7.5)') a , b , a+b




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2