modulus は「絶対値」じゃない
https://blog.goo.ne.jp/r-de-r/e/a6ddf31b879b083d6d62923310aec2ac
であるが,
要約すると
> 30284005485024840 %% 7
[1] 4
> 30284005485024840 %% 6
[1] 0
警告メッセージ:
絶対値で精度が完全に失われた可能性があります
ということだったが,最近の R では様相が違うようである。
事情により最新とは言えない R version 4.0.5 であるが,
> 30284005485024840 %% 7
[1] 3
> 30284005485024840 %% 6
[1] 0
最初の答えは 4 ではなく 3 であるし,
二番目の答えは 0 であるが,おかしなエラーメッセージは表示されない。
R 自身の多精度演算ライブラリの gmp でも確かめたが,
> library(gmp)
> as.bigz(30284005485024840) %% 7
Big Integer ('bigz') :
[1] 3
> as.bigz(30284005485024840) %% 6
Big Integer ('bigz') :
[1] 0
なので,今の状態が正しいようだ。
整数演算が自動的に多倍長で行われる Python でも
30284005485024840 % 7 # 3
30284005485024840 % 6 # 0
Julia でも
BigInt(30284005485024840) % 7 # 3
BigInt(30284005485024840) % 6 # 0
R の以前のざまは,何だったのか。
ということで,「 絶対値で精度が完全に失われた可能性があります 」という珍訳メッセージもお役御免と言うことだろうか。
※コメント投稿者のブログIDはブログ作成者のみに通知されます