Как решить предупреждение "Bignum вне диапазона Float"? - PullRequest
0 голосов
/ 07 мая 2009

Запуск этого кода:

n = 4 * 1000 * 1000
fn = (((1 + Math.sqrt(5)) ** n) - ((1 - Math.sqrt(5)) ** n)) / ((2 ** n) * Math.sqrt(5))
puts fn - 1

Я получаю предупреждение

Бигнум вне диапазона поплавков

Как я могу исправить свой код, чтобы решить эту ошибку?

Поскольку рубин динамически набирается, я не знаю как. Большое спасибо.

1 Ответ

3 голосов
/ 07 мая 2009

То, что вы ищете, это BigDecimal .


Что-то вроде этого может работать ( Я позволил этому запустить на моей машине в течение минуты, и он все еще не нашел ответа ... кажется вычислительно дорогим ):

require "bigdecimal"

n       = (4 * 1000 * 1000)
sqr_5   = BigDecimal("5.0").sqrt(5)
sqr_5a1 = BigDecimal((1+sqr_5).to_s)
sqr_5m1 = BigDecimal((sqr_5-1).to_s) 
fn      = (sqr_5a1.power(n) - (sqr_5m1.power(n))) / ((2.power(n)) * sqr_5)
puts fn - 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...