作者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