Math problem
Kay C Lan
lan.kc.macmail at gmail.com
Fri Feb 17 20:55:19 EST 2012
Guys I thought I'd speed test these.
Unfortunately I don't have the time to figure out exactly how Geoff's
amended version of Peter's solution actually works in this case; rounding
1.1 to 1.25, 3.3 to 3.5. I can get it to work with whole numbers, but not
0.25 increments as per the OP.
The current script produces:
For 10000 cycles
K's solution = 25ms
Paul's solution = 28ms
Geoff's solution for = 39ms
Geoff's solution doesn't = K's
Geoff's solution doesn't = Paul's
Please amend the script below:
on mouseUp
put 10000 into tRepeats
--to create a list of times to use.
--900 is used as fixed 1/4 hour interval
repeat tRepeats times
put 1329494400 & "," & \
(1329494400 + random(36000)) & "," & \
900 & cr after tStore
end repeat
--K solution
put the millisec into tStartClock
repeat for each line tLine in tStore
put item 1 of tLine into tStartTime
put item 2 of tLine into tEndTime
put item 3 of tLine into tIncrement
put round(((tEndTime + (tIncrement/2) - 1 -
tStartTime)/tIncrement),0)/(3600/tIncrement) & cr after tStore2
end repeat
put the millisec into tEndClock
put tEndClock - tStartClock into tTotalTime1
--Paul's max solution
put the millisec into tStartClock
repeat for each line tLine in tStore
put item 1 of tLine into tStartTime
put item 2 of tLine into tEndTime
put item 3 of tLine into tIncrement
put
round(((tEndTime-tStartTime)/max(tIncrement,60))+0.4999,0)/(3600/max(tIncrement,60))
& cr after tStore3
end repeat
put the millisec into tEndClock
put tEndClock - tStartClock into tTotalTime2
if (tStore2 <> tStore3) then
put "Paul's solution doesn't = K's" & cr after tErrors
end if
--Geoff's itemoffset solution
put the millisec into tStartClock
repeat for each line tLine in tStore
put item 1 of tLine into tStartTime
put item 2 of tLine into tEndTime
put item 3 of tLine into tIncrement
put (tEndTime - tStartTime)/tIncrement into x
put 4 into i --tried 900, 4, 25 and 0.25
put (x div i*i) + (item itemOffset((x mod i > 0),"true,false") of
(i,0)) & cr after tStore4
end repeat
put the millisec into tEndClock
put tEndClock - tStartClock into tTotalTime3
if (tStore2 <> tStore4) then
put "Geoff's solution doesn't = K's" & cr after tErrors
end if
if (tStore3 <> tStore4) then
put "Geoff's solution doesn't = Paul's" & cr after tErrors
end if
put "For " & tRepeats & " cycles" & cr into msg
put "K's solution = " & tTotalTime1 & "ms" & cr after msg
put "Paul's solution = " & tTotalTime2 & "ms" & cr after msg
put "Geoff's solution for = " & tTotalTime3 & "ms" & cr after msg
put tErrors after msg
end mouseUp
More information about the use-livecode
mailing list