回 帖 发 新 帖 刷新版面

主题:帮忙看看,这个小程序循环输出的时候为什么第五项为零?

real function y(x)
    real x,pi
    pi=3.1415926
    if((x.ge.0).and.(x.le.0.005))then
    y=100*sin(pi*x/2)
    else
    y=0
    endif

    end

    program main
    real external y
    real dt
    integer i,j
    dt=0.001
     do j=1,61,1
    print*,y(j*dt)
    end do
    print*,y(0.001),y(0.002),y(0.003),y(0.004),y(0.005)
    end
    
    
    
计算结果 应该是y(0.005)=0.78539 单个调用函数没问题,但是用循环打印出来的值里
y(0.005)=    0, 很困扰。。。。。


求解释!!!![em18]

回复列表 (共2个回复)

沙发

问题的关键: rounding-error
将你的问题提取出来:
dt = 0.001
 x = 5 * dt
TF = (x < 5.0E-3)
就是要看 TF 为真,还是为假。
因为 dt 表示为 4-byte 浮点数是有 rounding-error,所以,最后得到的
x 会比 5.0E-3 大,但小于 epsilon(x)。

板凳


[em1]谢谢!解决了  这个版块的高手们好热心啊! 感动

我来回复

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