Я сейчас серьезно запутался. У меня есть функция, создающая таблицу со случайным количеством записей, и я попробовал два разных метода, чтобы выбрать это число (которое несколько взвешено):
Метод 1, отдельная функция
local function n()
local n = math.random()
if n < .7 then return 0
elseif n < .8 then return 1
end
return 2
end
local function final()
for i = 1, n() do
...
end
end
Способ 2, прямой расчет
local function final()
local n = math.random()
if n < .7 then n = 0
elseif n < .8 then n = 1
else n = 2
end
for i = 1, n do
...
end
end
Проблема в следующем: по какой-то причине первый метод работает на 30% быстрее, чем второй. Почему это?
math
. - person lhf   schedule 20.05.2016math
одинаковое, один. - person user6245072   schedule 20.05.2016local t = os.clock() for i = 1, 1000 do final() end print((os.clock() - t) / 1000)
- person user6245072   schedule 20.05.2016final
является частью более крупного метода, который выполняет некоторые операции и циклы на основе числа, определенного здесь, вчера я пытался вызвать более крупный метод и измерить его. Я могу поклясться, что первый метод занимал около 0,05 секунды каждый раз, когда я его запускал, а второй — 0,07. Попытка позвонить толькоfinal
сегодня показала, что вы, ребята, правы, второй быстрее. - person user6245072   schedule 20.05.2016os.clock
не так точен, а 1000 итераций слишком мало для такой маленькой функции. В основном вы измеряли случайные сбои в работе вашего процессора. - person Oleg V. Volkov   schedule 20.05.2016