On 29 March 2017 at 15:34, Paul Moore <[email protected]> wrote:
> So the big difference is removing def from roll, with removing def
> from rng having a smaller but detectable effect.
I just tried to generalise the script, by making a simulate function
that takes the action as a closure. I won't post all the code here,
but basically:
def simulate = { N, cl ->
def results = ...
N.times {
int n = cl()
results[n]++
}
// Report the results
}
simulate(1000000) {
... body of roll() here
}
This took 20 seconds to run.
It's certainly possible I've made a stupid mistake here, but I thought
that doing this was essentially a simple refactoring of the original
code, and I'm pretty surprised to see a 40x increase in runtime.
Before I spend ages hunting for my mistake, is there any obvious
reason why this *isn't* just a refactoring, and I should have expected
it to run a lot slower?
(If nothing else, this is a great learning exercise for me :-))
Thanks,
Paul