yifanxing1992 发表于 2014-11-4 15:35:36

关于循环问题的求助贴

各位大神:主要是设置了一个循环解方程组的程序,但是问题是,在我设置的时候t应该是从0-12以0.12的步长做循环,但是最后运行出来的效果确实每次的步长不是0.12,而少了0.000000001左右量级,然后累加起来误差越来越大。。求大神解决。PROGRAM test
IMPLICIT NONE
   REAL,PARAMETER::Q=1.0,C=1.0
   REAL t,X,Y,Z,PX,PY,PZ
   DO t=0.0,12.0,0.12000000
   Z=(((2-2*C**2+Q**2)/(4*C))*(t-Z))-(((Q**2)/(8*C**2))*sin(2*t-2*Z))
   Y=0
   X=(Q/C)*(cos(t-Z)-1)
   PX=Q*sin(t-Z)
   PY=0
   PZ=(C**2-1)/(2*C)-(Q**2)*((sin(t-Z))**2)/(2*C)
   open(unit=11,file='result2.txt')
   write(11,100)t,PX,PY,PZ,X,Y,Z
   100 FORMAT(1X,F20.8,6F12.8,6F12.8,6F12.8,6F12.8,6F12.8,6F12.8)

   end do
END

楚香饭 发表于 2014-11-4 16:03:33

你最大的问题是 Z 没有初始值。

我感觉不到你的误差积累。单精度浮点数只有 6-7 位有效数字的精度,这一点请时刻铭记。如果觉得不够,可以考虑用双精度浮点。

yifanxing1992 发表于 2014-11-4 16:20:09

首先我觉得Z不需要初值,因为第一个方程,目的是需要通过t,c,q三个值确定Z的值。。所以觉得这个不是最大的问题。

另外我的的问题是这样子的,就是按理说 t变量的取值。t=0.00000000,0.12000000,0.2400000000,0.36000000这样下去,但是实际编译出来的结果是t=0.00000000,0.11999999,0.23999998,0.36999996……这个样子

yifanxing1992 发表于 2014-11-4 16:20:37

楚香饭 发表于 2014-11-4 16:03
你最大的问题是 Z 没有初始值。

我感觉不到你的误差积累。单精度浮点数只有 6-7 位有效数字的精度,这一点 ...

首先我觉得Z不需要初值,因为第一个方程,目的是需要通过t,c,q三个值确定Z的值。。所以觉得这个不是最大的问题。

另外我的的问题是这样子的,就是按理说 t变量的取值。t=0.00000000,0.12000000,0.2400000000,0.36000000这样下去,但是实际编译出来的结果是t=0.00000000,0.11999999,0.23999998,0.36999996……这个样子

楚香饭 发表于 2014-11-4 17:44:06

Z=(((2-2*C**2+Q**2)/(4*C))*(t-Z))-(((Q**2)/(8*C**2))*sin(2*t-2*Z))

等号右边有 Z,计算时没有值。会导致不可预料的后果。

单精度浮点精度问题,我在2楼已描述过。

yifanxing1992 发表于 2014-11-5 21:45:30

好的。谢谢啦。
页: [1]
查看完整版本: 关于循环问题的求助贴