Я показывал своей дочери магический шаблон умножения двух чисел 111..111 в R, например,
> options(scipen=999)
> 1^2
[1] 1
> 11^2
[1] 121
> 111^2
[1] 12321
> 1111^2
[1] 1234321
> 11111^2
[1] 123454321
> 111111^2
[1] 12345654321
> 1111111^2
[1] 1234567654321
> 11111111^2
[1] 123456787654321
> 111111111^2
[1] 12345678987654320
Все отлично работает, пока не достигнет 9 цифр. Как видно из последней строки, ответ явно неверный;это должно быть 1234567898765432 * 1 *, а не 1234567898765432 * 0 *.
Я запускаю это в R (v3.6.1, x86_64-apple-darwin15.6.0, 64-разрядная версия) на ноутбуке Macbook Pro.
Кто-то сказал, что это может быть вызвано целочисленным переполнением. Здесь два вопроса:
Кто-нибудь может объяснить, как именно это произошло? например, как последний 1 изменился на 0?
Как я могу получить правильный ответ в R?
Спасибо.