LINUX.ORG.RU

[javascript]Math.pow(2,53) + 1 = Math.pow(2,53)

 


0

1
>>> Math.pow(2,53)
9007199254740992
>>> Math.pow(2,53) + 1
9007199254740992
>>> Math.pow(2,52) + 1
4503599627370497
>>> Math.pow(2,52)
4503599627370496

Недавно нарвался на сие, когда самописным JSON-RPC выковыривал из базы long айдишники.

Опасайтеся други. Коварство в том что визуально число выглядит как целое, т.е. без точек, 1.12343E12 и прочих

Да отчего так и почему догадаться нетрудно, просто не все задумываются что Number в javascript это double, а с датами там все еще кучерявее (long в дату также не влезает в ff)



Последнее исправление: kifer (всего исправлений: 1)

особо эффектно

var a = Math.pow(2, 53), b = a; 
var i = 100; while(i--) ++a; 
console.log(b - a); 

bga_ ★★★★
()

те теоретически это черная дыра которая способна привести к бесконечной рекурсии

bga_ ★★★★
()

Причем это во всех браузерах такое.

bga_ ★★★★
()
Ответ на: комментарий от bga_

может, но ничего не поделаешь, причем в документации MDC я не нашел упоминания сего фокуса

kifer
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.