2011-07-23 6 views
0

ウェル[0,1]内の任意の実ベース1/2でバイナリ膨張のように書くことができる、知られているように:私は所与ためBIを取得するための効率的な方法を希望Mathematicaで[0,1] realのバイナリ展開で効率的な方法を得るには?

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

xとインデックスiがあります。Mathematicaに組み込みの方法はありません。 IntegerDigitsとRealDigitsは役に立たないようで、関連する関数はどれも関連していません。

明白な解決策は手動変換を行うことですが、私はそれを避けることを望んでいました。何か不足していますか?

EDITは:今後の参考のために、私は

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

BinaryExpansionBit[x, i] 

は私が話していたバイを与える場合は、この方法を行うことができます探していたもの。

答えて

1

「効率的」という意味にかかっています。このWolfram Alpha exampleが示すように、Mathematicaはバイナリに簡単に変換できます。

それ以外の場合、整数部分のパリティは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の出力の第2の要素はに対する第1の要素のあなたの位置を指示小数点。だから、実際のrのために、0<r<1あなたのbi = rd[[1,i-rd[[2]]]

関連する問題