2016-08-07 7 views
0

Rに大きな数値を追加すると問題が発生します。小さい値は無視され、誤った結果が出ます。R大小の数値を加算して小さい値を無視しています

たとえば、私はここで見つけたバイナリ〜10進変換器を使用しています:Convert binary string to binary or decimal value。最後から二番目のステップは、次のようになります。

2^(which(rev(unlist(strsplit(as.character(MyData$Index[1]), "")) == 1))-1) 
[1] 1   2   32   64   256   2048   ... 

私は長さのために、全ての数が含まれていませんでしたが、これらの数値が加算されたときに、彼らが進数の整数値を生成します。正しい結果は4,919,768,674,277,575,011ですが、Rは私に4,919,768,674,277,574,656の結果を与えています。この番号は、最初の5つの番号の合計である355だけオフになっています。

私はそれが整数の限界と関係があるかもしれないと思っていましたが、私はそれをテストしました。そして、Rは必要以上のものを扱うことができます。ここで再び、誤った結果が得られ、私が試した何か、の例を示します。

2^64 
[1] 18446744073709551616 #Correct Value 
2^65 
[1] 36893488147419103232 #Correct Value 
2^64 + 2^65 
[1] 55340232221128654858 #Correct Value 
2^64 + 2^65 + 1 
[1] 55340232221128654858 #Incorrect Value 

多数の追加の精度に問題のいくつかの並べ替えがありますように思えるが、私はそのように、この問題を解決することができますかわかりません私は希望の結果を得ることができます。

ご協力いただければ幸いです。そして、何かが不適切にフォーマットされていたら、私は謝罪します、これはサイトの私の最初の投稿です。

答えて

2

大きな整数のために、私たちはgmp

library(gmp) 
as.bigz(2^64) + as.bigz(2^65) + 1 
# Big Integer ('bigz') : 
#[1] 55340232221128654849 
から as.bigzを使用することができます
関連する問題