3

http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-the」から7.31

多数(2 ^ 53を超える)がモジュロ演算でエラーを引き起こす可能性があることはすでにわかっています。

しかし、近似誤差をとっても、なぜ大きな数がすべて偶数と見なされるのか(2 ^ 53を超える大きな整数の「奇数」は見たことがない)理解できません。

(2^53+1)%%2
(2^100-1)%%2

エラーメッセージ(モジュラスの精度が完全に失われる可能性があります)は無視できます

等..

すべて1ではなく0です

なぜそうなのか?(ある程度の概算があることは知っていますが、その理由を具体的に知る必要があります)

> print(2^54,22)
[1] 18014398509481984.00000 
> print(2^54+1,22)
[1] 18014398509481984.00000 
> print(2^54+2,22) 
[1] 18014398509481984.00000 
> print(2^54+3,22) 
[1] 18014398509481988.0000
4

2 に答える 2

8

IEEE倍精度値には、53ビットの仮数があります。53を超える2進数の精度が必要な数値は四捨五入されます。つまり、54以降の桁は暗黙的にゼロに設定されます。したがって、大きさが2 ^ 53より大きい数値は、必ず偶数になります(整数表現の最下位ビットは浮動小数点の精度を超えているため、ゼロであるため)。

于 2013-03-12T19:17:07.070 に答える
2

マグニチュードが2^31-1より大きいv2.15.3以前のバージョンのRには、「整数」のようなものはありません。「数値」または「二重」エンティティを使用しています。あなたはおそらくあなたの価値観を「切り捨て」またはtrunc-評価しています。

 ?`%%`  

間もなくリリースされるRのバージョン3.0には8バイトの整数が含まれるため、この問題は2 ^ 2 ^((8 * 8)-1))-1を超えるまで発生しません。現時点では、整数への強制はそのレベルで失敗します。

> as.integer(2^((8*4)-1)-1)
[1] 2147483647
> as.integer(2^((8*8)-1)-1)
[1] NA
Warning message:
NAs introduced by coercion 

したがって、最初の例では適切な結果が再実行される可能性がありますが、2番目の例では失敗する可能性があります。

于 2013-03-12T19:14:48.583 に答える