Benchmark: timing 5000000 iterations of sub1, sub2, sub3... sub1: 8 wallclock secs ( 7.49 usr + 0.00 sys = 7.49 CPU) @ 667467.63/s (n=5000000) sub2: 7 wallclock secs ( 7.27 usr + -0.01 sys = 7.26 CPU) @ 688800.11/s (n=5000000) sub3: 5 wallclock secs ( 5.12 usr + 0.01 sys = 5.13 CPU) @ 975419.43/s (n=5000000)