Re: [問題] 新手問題:十進位轉二進位再用二進位轉回
我還真不知道能這樣輸出成二進位的樣子,學到了
先講一下,B32.6不是小數點第6位,是不到6位的話補0的意思,
不過在目前的輸出都超過6位的話就沒影響
假設你是想比較浮點數的精確度,可能要先弄清楚一些概念,
1. 浮點數(Fortran裡叫real)在電腦裡是用二進位儲存
存下的值就是你 write B32 出來的樣子
2. 要比較不同數值的存法可以把輸出的二進位用字串存,改字串比較容易
3. 字串可以再 read 回浮點數比較變化
下面是比較的程式,77的寫法記得先空7格
program test_real
implicit none
real*4 pi, pi_after
character*32 pi_str
pi = 3.1415
! 轉成二進位,用字串存
write(pi_str,'(B32)')pi
! 印出來
write(*,*)'pi in bin: ',pi_str
! 最後一位0改成1
pi_str(32:32) = '1'
! 印修改過的二進位
write(*,*)'pi in bin: ',pi_str
! 轉回浮點數
read(pi_str,'(B32)')pi_after
! 印出來
write(*,*)'original pi = ',pi
write(*,*)'modified pi = ',pi_after
end
※ 引述《chunyu (sailor 知)》之銘言:
: 小弟第一次接觸Fortran,先前完全沒有其他程式語言基礎,想請問各位神大
: 假設兩個數值分別是 k1=3.1415和 k2=2.71828 ,怎麼轉成二進位(取到小數第6位)再轉回十進位,並計算其值與原值的差?
: IMPLICIT NONE
: Real*4 k1, k2
: k1=3.1415
: k2=2.71828
: WRITE(*,'("Binary -> ", 2B32.6)') k1, k2
: OPEN(unit=20, file='FT_01031201_EX04_2.out')
: WRITE(20,'("Binary -> ", 2B32.6)') k1, k2
: 只會寫到這裡
: 從下面開始,改怎麼利用剛剛算的二進位值再轉十進位?
: WRITE(*,'("Output the data")')
: 50 FORMAT('Output the data')
: WRITE(20,50) 'Integer -> ', 2I32.6 ,k1, k2
: CLOSE(20)
: END
: 萬分感謝解惑
: -----
: Sent from JPTT on my iPad
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 46.15.235.12 (挪威)
※ 文章網址: https://www.ptt.cc/bbs/Fortran/M.1679343108.A.0CE.html
推
03/22 17:27,
1年前
, 1F
03/22 17:27, 1F
→
03/22 19:23,
1年前
, 2F
03/22 19:23, 2F
→
12/25 22:50,
11月前
, 3F
12/25 22:50, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Fortran 近期熱門文章
PTT數位生活區 即時熱門文章