2011-07-23 56 views
0

如衆所周知的,在任何實際的[0,1]可以在鹼的1/2被寫爲二進制擴展:在Mathematica中實現[0,1]實數的二進制擴展的有效方法?

x = b1 * 1/2^1 + b2 * 1/2^2 + ... 

我想一種有效的方式來獲得對於給定的雙向 x和索引,我不認爲在Mathematica中有任何內置的方法。 IntegerDigits和RealDigits似乎無法提供幫助,而且沒有任何相關功能是相關的。

明顯的解決辦法是做手動轉換,但我希望避免這種情況。我錯過了什麼嗎?

編輯:以供將來參考,我一直在尋找可以做這種方式,

BinaryExpansionBit[p, j] := RealDigits[p, 2, 1, -j][[1]][[1]] 

其中

BinaryExpansionBit[x, i] 

BI我在說什麼。

回答

1

這取決於你的意思是「高效」。 Mathematica可以很容易地轉換爲二進制,如Wolfram Alpha example所示。

否則你要找的是整數部分x * 2^i的奇偶性。

+0

謝謝。我的問題有點愚蠢,並感謝與我同在。 :) –

4

我沒有看到RealDigits有什麼問題。

rd=RealDigits[0.1,2]

給出了一個很好的二進制展開:

(* out: 
    {{1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 
    0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 
    1, 0, 0, 1, 1, 0, 1, 0}, -3} 
*) 

測試:

rd[[1]].Table[1/2^(n - rd[[2]]), {n, Length[rd[[1]]]}] 

(* out: 3602879701896397/36028797018963968, which is 0.1*) 

RealDigit的輸出的第二個元素告訴你在第一元件的位置相對於所述小數點。所以,對於一個真正的r,0<r<1你的bi = rd[[1,i-rd[[2]]]