2016-05-02 39 views
-2

我想找到一個與MATLAB中的dec2bin(d,n)類似的函數,它爲Fortran生成一個至少包含n位的二進制表示。在線我發現this code,它將十進制轉換爲二進制,但沒有機制來決定位數,並要求用戶決定其是一個正整數還是一個正實數...Fortran中是否有等價的MATLAB dec2bin函數?

+0

非常感謝 – Sha

回答

4

這是一個解決方案基於B編輯運營商(根據高性能商標的評論),這需要一個相當新的編譯器。

!> Returns a binary representation of d as a string with at least n bits. 
!> abs(d) < 2^52 
function dec2bin(d, n) 
    implicit none 
    integer,intent(in)   :: d 
    integer,intent(in),optional :: n 
    character(len=:),allocatable :: dec2bin 
    character(len=53)    :: tmp 
    integer      :: n_ 
    character(len=8)    :: f 

    if (present(n)) then 
    n_ = min(n, 53) 
    write(f,'(i2)') n_ 
    f = '(B' // trim(adjustl(f)) // '.' // trim(adjustl(f)) // ')' 
    else 
    f = '(B53)' 
    endif 

    write(tmp,f) d 
    dec2bin = trim(adjustl(tmp)) 
end function 

請注意,此功能不檢查符號(因爲符號被正確處理)。如果你想限制這個正整數,你需要在函數外部完成。


僅僅因爲我必須自己查找正確的語法,以下是Fortran 2008 Standard,Cl的相關章節。 10.7.2.4 「B,O,和Z編輯」:

1生物武器,BW .M,嗷,嗷.M,即要被編輯的字段佔用瓦特度Zw,和ZW .M編輯描述符表示 職位,除非w爲零。當w爲零時,處理器選擇字段寬度。在輸入時,w不應爲 零。相應的輸入/輸出列表項應該是整型,實型或復型。

[...]

6爲了Bw的.m,嗷.M,和ZW .M編輯描述符中的輸出域是相同的體重,嗷,和ZW編輯描述,不同之處在於數字串或十六進制數字串至少包含m位數字。如有必要,包含足夠的前導零以實現最小的m位。 m的值不得超過w的值 ,除非w爲零。 [...]

相關問題