2017-01-07 18 views
0

私はRで次の計算の問題に直面しています。私はfactorial()関数をRに使うことができましたが、パッケージ "gmp"と "Rmpfr"の効率を調べるためにfactorialZ()を使用しました。驚いたことに、私は乗算が0(ゼロ)になることを発見した。 Big Integer( 'bigz')の出力は0です。これはどのように処理できますか?どんな鉛も役立ちます。ありがとう。Rに大きな整数乗算R

答えて

1

なぜこのようなことが起こっているのか分かりません(私はそれが被乗数が正確なバイナリ表現を持っているかどうかによると思っていましたが、私はそれについて間違っていたと思います)。おそらく、定義されていない動作です。つまり、パッケージの作者がbigzオブジェクトを通常のR numericオブジェクトでうまく再生させる必要があるという特別な理由はありません。

factorialZ(10)/10 
Big Rational ('bigq') : 
[1] 362880 

または背面最初の正規Rの整数に変換します:あなたはは次のように表すことができないという番号をお持ちの場合は

as.integer(factorialZ(10))*0.1 
[1] 362880 

あなたが10で分割したい場合は、ちょうどそれをR整数または数値(例えば> 1e310)が、浮動小数点値を持つ操作でそれを使用する必要がある、あなたはmpfrタイプ(高精度浮動小数点)に変換することができます:

.bigz2mpfr(factorialZ(200))*0.1 
1 'mpfr' number of precision 1248 bits 
[1] 78865786736479054733166935894034745829709731011205555800275415888196330271667643800669079467809137225619298895315986676109948164059578143835819967701344559489245054862932798359603276806168730010575811932061231243634893448846943919677538088311404392920603667803910252938083642743828224123449104546887425346845059274452636794880000000000000000000000000000000000000000000000000 
+0

ベン・ボルカー、あなたの提案に感謝します。実際、上記の部分は私が見たいと思っていたものです。私の元の計算では、他のいくつかのソースから生成されたランダムな浮動小数点による乗算が必要です。したがって、手動で乗算することはできません。このような状況を処理するための専用手続きがあるかどうかを知りたい。 – Tubai

+0

便利な答えを提供するには、より多くの文脈が必要です。生成する階乗は非常に大きく、大きな整数型が必要ですか?標準(固定精度)浮動小数点として格納されている値を乗算すると、とにかく大きな整数の精度が失われます。 (数値は非常に大きいので倍精度浮動小数点でも格納できません(例:> 1e310?) –