2017-07-07 5 views
-1

最近、私はNIST SP800-22で説明されているランダム性のための15個のテストを実装しようとしていました。私の関数の実装を確認するために、NISTのドキュメントがそれぞれのテストに対して提供するサンプルを実行しています。これらのテストの中には、非常に長いビット列(最大100万ビット)が必要なものがあります。たとえば、例の1つでは、入力は「最初の100,000ビットがe」です。それでは、質問:Pythonの浮動小数点数の精度を超える浮動小数点値のビット表現を生成するにはどうすればよいですか?非常に長いバイナリ文字列として浮動小数点定数を符号化する

私は発見した物品のバイナリ文字列に整数変換(ビン()関数)、及び(!スロー2(によって繰り返し除算)と浮動小数点精度によって制限される)バイナリに浮動小数点画分を変換。私は$ e = \ sum_ {n = 0}^{\ infty} \ frac {2n + 2} {(2n + 1)!} $を使って何らかの方法で反復的に構築することを検討し、次の部分の値を計算し、それをバイナリ表現に変換し、それを何らかの形で累積表現に追加します(これを行う方法はまだ考えています)。しかし、私はこのパスを下っている同じ壁に打ちました:浮動小数点値の精度は、この合計でさらに遠ざかります。

任意の精度の浮動小数点値から任意に長いビット列を作成するにあたって、誰か提案がありますか?

PS - また、ここで私のMarkdownの数式を正しくレンダリングする方法はありますか? :-)

答えて

0

私はgmpy2ライブラリを維持しており、それは任意精度のバイナリ算術をサポートしています。以下は、eの最初の100ビットを生成する例です。

>>> import gmpy2 
>>> gmpy2.get_context().precision=100 
>>> gmpy2.exp(1).digits(2)[0] 
'101011011111100001010100010110001010001010111011010010101001101010101 
1111101110001010110001000000010' 
+0

ありがとうございました! –

関連する問題