作者sinlin (新生活!~)
看板Fortran
标题[问题] 浮点数下的if和等於
时间Fri Oct 19 22:45:34 2012
do i=1,200
co(i)=-1.005d0+dfloat(i)*0.01d0
! write(*,*) co(i)
if (co(i).eq.(-0.975d0)) write(*,*) i
end do
我的程式片段如上
本来只是懒得手算,想要看一下在i=几时,会出现co=-0.975
结果if不成立,没有输出
好奇之下就列出了所有co来看
发现co的值是-0.9749999999
我以往都没注意到这种情况!
请问这样子有没有什麽简单的写法可以避免这种事情发生呢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 148.81.47.89
1F:→ charlesdc:判断一个区间 10/20 05:40
2F:推 callmei:因为浮点数运算有ROUNDING ERROR 10/21 03:32
3F:推 wiki70170:宣告为单精度REAL*4看看 10/25 16:44
4F:→ sinlin:嗯嗯,ok了,谢谢各位 10/29 23:46
5F:→ sinlin:改宣告没帮助,我把if(co(i)-(-0.975d0).le.0.001d0) 10/29 23:51