выполнения этого кода составляет около 1 секунды:петля с большим количеством итераций делает выполнения невероятно медленно
start_time = Time.now
prev = 1
(1..1000).each do |i|
(1..10000).each do |j|
result = j * prev
result = result + prev
result = result - prev
result = result/prev
prev = j
end
end
end_time = Time.now
printf('%f sec', end_time - start_time)
Но когда я использую одну петлю с 10000000 итераций (вместо 2-х петель, 1000 и 10000 итераций, как написано выше), он становится намного медленнее (около 4,5 секунд):
start_time = Time.now
prev = 1
(1..10000000).each do |j|
result = j * prev
result = result + prev
result = result - prev
result = result/prev
prev = j
end
end_time = Time.now
printf('%f sec', end_time - start_time)
Почему это происходит? Общий номер итераций остается прежним.
Try исследовать значения 'result' в каждом конкретном случае. Я думаю, что '10_000_000 * 9_999_999' больше, чем' 10_000 * 9_999'. –
У меня есть 1.35sec для первого и 1.24sec для второго кода. Переменная 'result' не растет чрезмерно, потому что она сбрасывается каждый раз. –
Итак, итерация первого кода составляет 1,35 секунды и 1,24 секунды для второго? Странный. Попробуйте выполнить кастинг на более мелкие куски, каждые 20% от общего числа, например. Общая нагрузка должна увеличиваться в равной степени с простой проверкой, поэтому она не должна заметно влиять на тест. –