作者agody (講不聽)
看板Fortran
標題Re: [請益] 變數亂跑
時間Sat Nov 29 10:34:19 2008
真要硬用原本來寫的話要這樣
※ 引述《LightRoach (雪花飄)》之銘言:
: 最近有一個問題實在是困擾我很久
: 所以上來請教大家囉~
: 我的 fortran 程式
program MAIN
implicit none
integer II
real*8 T
: do II=0, T
do II=0, int(T)
.......
.......
enddo
write(*,*) 'II=', II
end program
: 當然被迴圈包住的裡面做了很多事
: 包括 call 一些 subroutine
: 讓我很困擾的是
: 我多加 write(*,*) 'II=', II 竟然看到 II 不是介於 0~T之間的值
: 可能是很大(5位數以上)的整數 正負都有可能
原因很簡單
T記憶體用浮點數格式
但在迴圈時編譯器將他當成整數格式
所以讀出來的數字是錯的
舉例浮點數格式類似 +5.0 = 1 100000 00000001
正負 0.5 10^1
但用整數來讀會變成 2^16+2^15+2^0 = 65536+32768+1
以上格式我亂掰的
但差不多是這樣
寫程式時嚴謹點吧,迴圈的變數要習慣用整數
內文有需要用到II和T再轉成浮點數用
用float(for real*4)或dfloat(for real*8)轉過去
: 雖然迴圈仍然很神奇地會停住 Orz
: 有人有發生過這樣的情況嗎? 建議要怎麼解決呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.228.98.153
1F:推 LightRoach:感謝大家的意見!!! 我來改改看 XD 11/29 10:38
2F:→ Jing1118:原PO是我同學嗎XD 11/30 04:58
3F:→ agody:Yes 12/01 16:00