2016-04-22 7 views
1

mpmathのmpfオブジェクトの1つに非常に大きな16進数をロードしたいと思います。私はpythonのmpmathモジュールを使う方法mpfを16進数で初期化するには?

from mpmath import mp, mpf 
a = mpf('0x100') # starting small here 

を試してみましたが、それは故障:

ValueError: could not convert string to float: '0x100' 

単に長整数定数を使用すると、同様の精度を失うことに表示されます。

>>> mpf.prec = 300 
>>> a = mpf(0x123444444444444444444444444444444444444444444444444444444444444) 
>>> print("%x"%a) 
123444444444440000000000000000000000000000000000000000000000000 
>>> a = mpf(123444444444444444444444444444444444444444444444444444444444444) 
>>> print("%d"%a) 
123444444444444452865502098927835995454229086812688745177808896 

からMPFインスタンスを初期化するための適切な技術は何ですか16進文字列ですか?

+0

整数または浮動小数点数の16進表現で作業しようとしていますか? – casevh

答えて

0

Pythonは接頭辞を使用して16進数を認識します。あなたはほとんどそれを得た:ちょうど引用符を削除します。

a = mpf(0x100) # starting small here 

を今、このブレークはあなたの番号どのように大きなあるに依存します。 Pythonの整数に収まらない場合は、自動的に長整数(Python 3ではこれがデフォルトです)にアップグレードされますので、心配する必要はありません。特別なデータ型について 十分なメモリがあれば、任意の16進数を扱えるはずです

+0

私は間違いありません私はpythonで生成されたOpenCLのソースコードを検証しようとしていますが、固定精度の計算(384または1600ビットと考える)があります。0x100はちょっとしたおもちゃのケースでしたが、96桁の16進数のものをターゲットにしていました –

+0

@Bob私は理解しています:私はあなたのための小さな研究をして答えを更新しました:Pythonは気にしません(ポイントまで)何桁のyo UR番号は、それを処理します。 – Cyb3rFly3r

+0

あなたのアイデアを実装しようとしましたが、別の機能不全を発見しました(今質問に追加されています)。動作するコードサンプルがありますか? –

関連する問題