Using component-wise maths to avoid allocations, see #50
Using temporary variables to avoid allocations, see #50