Я понял в чём проблема. Дело не в ошибке в вычислениях, а дело в том, что функция setTimeout ограничена лимитом времени, максимум времени ожидания равно 2147483647, если время ожидания больше, например 2147483648, то таймер будет срабатывать сразу. Вот из-за чего таймер срабатывает сразу.
Спасибо за помощь, буду разбираться.