Your test is actually flawed. $* can only be used once in the current scope, after that it actually doesn't do anything.
Thanks. That seems like another good reason to avoid using $* to me...
After adjusting for this by using
this script, in which I also added a "control" test where only the calculation is removed so we can see how much overhead there is, I get:
$*: 4524 ms.
Loop: 7457 ms.
Control: 702 ms.
So, $* is faster, but it's less than a factor of 2 difference.