Какое максимальное действительное число в компьютере я могу получить ИСТИНА в результате is.finite в R? - PullRequest
0 голосов
/ 26 апреля 2019

(добавлен воспроизводимый пример)

Максимальное положительное двойное число (с плавающей запятой) в компьютере в моей 64-разрядной ОС и 32-разрядном R:

.Machine$double.xmax # 1.797693e+308

Итак,следующее TRUE:

is.finite(1.797683e+308) # TRUE; here, as argument I used 1.797683e+308

Итак, какое максимальное реальное число в компьютере я могу получить TRUE в результате is.finite?

1 Ответ

0 голосов
/ 28 апреля 2019

Ниже приведен частичный ответ на вопрос:

is.finite(179769313486231570838400602864442228000008602082842266064064680402680408280648240046204888888288080622822420842246006644866884860462806420066668022046626024066662068886808602862886866800048228686262462640668044406484606206082824406288200264266406808068464046840608044222802268424008466606886862062820068082689.99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999) # TRUE    
is.finite(179769313486231570838400602864442228000008602082842266064064680402680408280648240046204888888288080622822420842246006644866884860462806420066668022046626024066662068886808602862886866800048228686262462640668044406484606206082824406288200264266406808068464046840608044222802268424008466606886862062820068082689.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999990) # FALSE; One more digit ("0") at the end of the decimal point killed it!
is.finite(179769313486231570838400602864442228000008602082842266064064680402680408280648240046204888888288080622822420842246006644866884860462806420066668022046626024066662068886808602862886866800048228686262462640668044406484606206082824406288200264266406808068464046840608044222802268424008466606886862062820068082690) # TRUE (For math, it is absurd this to be returned "TRUE"). Why is this returned TRUE instead of FALSE?
is.finite(1797693134862315708384006028644422280000086020828422660640646804026804082806482400462048888882880806228224208422460066448668848604628064200666680220466260240666620688868086028628868668000482286862624626406680444064846062060828244062882002642664068080684640468406080442228022684240084666068868620628200680826990) # FALSE

Приведенные выше три строки кода указывают, что is.finite не работает должным образом с математической точки зрения!

Я проверил эту ситуацию на следующих онлайн R-серверах, и я получаю тот же результат "ИСТИНА, ЛОЖЬ, ИСТИНА":

Online R Серверы:

https://paiza.io/projects/pTHIb6DfqKIFnBFBjEykdQ?language=r    
https://www.tutorialspoint.com/execute_r_online.php    
https://rdrr.io/snippets/    
https://rextester.com/l/r_online_compiler    
https://www.jdoodle.com/execute-r-online  

Как только я найду логику в этой ситуации, я добавлю и ее сюда.

...