回 帖 发 新 帖 刷新版面

主题:精度!精度!

原贴“各位帮忙看看我的问题”中,那个算法我是证明过的,用其它语言也算过,肯定是能退出的,但不知为什么在FORTRAN中就是不行。我能找到的问题就只有精度问题了,举个例子:

已知:1.52368*2.0=3.047360
但是,我在FORTRAN中试验了一下,如果令:
REAL(KIND=8)::A=1.52368,然后:
WRITE(*,"(F10.8)") A*2.0

结果并不等于3.04736000

这个微小的精度差异或许在不停的循环迭代中会对最后的结果有重大影响。

我不知道自己这个猜想对不对,想证明一下,但是不知道该如何去写代码。在上面的例子中就是,如何能让他输出准确的结果

回复列表 (共15个回复)

11 楼

如果A,B不准,matmul必然不准

12 楼

MATMUL(A,B)内部计算就是按照A,B的精度计算. 如果fortran不能保证同样道理其它语言也不能保证.
我确实不明白你的问题症结所在.

13 楼

[quote]MATMUL(A,B)内部计算就是按照A,B的精度计算. 如果fortran不能保证同样道理其它语言也不能保证.
我确实不明白你的问题症结所在.[/quote]
如果是C/C++有情可原,因为C/C++默认double类型,而Fortran默认单精度类型。

14 楼

从文件中读数据时,怎么能正确的读出来,总不能在每个数据后面都加上d0吧。如果数少还方便,数多就太麻烦了

15 楼

文件中读取数据只需要指定好读取的变量就可以了. 如果你给的参数精度太高, 那始终还是会有rounding error(舍入误差或截断误差?我这几个概念混着用没分清)的.
唯一能够精度完美读入的只有二进制文件. 不过使用起来不一定方便.

我来回复

您尚未登录,请登录后再回复。点此登录或注册