主题:chi2检测的程序问题
主要问题是精度,所有的real都是*8的精度
f(i)=1./c*1000,因为这里是均匀分布,所有的f(i)都是一样,而c取值是10000
然后f(i)=1001.00000000000000,其实应该等于1000.的
而p(i)=9.99000000000018346e-002,其实应该等于0.1的
这样一来
ita=0
DO i=1,10
ita=ita+f(i)**2./(c*p(i))
ENDDO
ita=ita-10000
######
ita应该等于0,但是由于精度问题,结果却是30.040040039855739,如果ita<5.899就说明这个结果合格,这样一来就让本身合格的ita变成了不合格。很蛋疼的精度问题。
求大神指导
chi2检验的那段程序如下:
!chi2
!chi2...ita=sigma[i](f(i)**2./(n*p(i)))-n
!calculate f(i)
DO i=1,10
f(i)=0
ENDDO
DO i=1,10
f(i)=(m(i+1)-m(i)+1)
ENDDO
DO i=1,10
WRITE(10,*)f(i)
ENDDO
!calculate p(i)
DO i=1,10
p(i)=0
ENDDO
DO i=1,10
DO j=m(i)+1,m(i+1)-1
p(i)=p(i)+(a(j+1)-a(j))*0.5*(q(j+1)+q(j))
ENDDO
ENDDO
DO i=1,10
WRITE(14,*)p(i)
ENDDO
!calculate ita
ita=0
DO i=1,10
ita=ita+f(i)**2./(c*p(i))
ENDDO
ita=ita-c
ita=(ita**2.)**0.5
WRITE(11,*)ita
!end
END