[問題] 浮點數下的if和等於

看板Fortran作者 (新生活!~)時間12年前 (2012/10/19 22:45), 編輯推噓2(203)
留言5則, 4人參與, 最新討論串1/1
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

10/20 05:40, , 1F
判斷一個區間
10/20 05:40, 1F

10/21 03:32, , 2F
因為浮點數運算有ROUNDING ERROR
10/21 03:32, 2F

10/25 16:44, , 3F
宣告為單精度REAL*4看看
10/25 16:44, 3F

10/29 23:46, , 4F
嗯嗯,ok了,謝謝各位
10/29 23:46, 4F

10/29 23:51, , 5F
改宣告沒幫助,我把if(co(i)-(-0.975d0).le.0.001d0)
10/29 23:51, 5F
文章代碼(AID): #1GWMUG-9 (Fortran)
文章代碼(AID): #1GWMUG-9 (Fortran)