On Wed, Jan 21, 2009 at 01:43:37PM -0500, Michael George wrote: > Marius Gedminas wrote: >> On Wed, Jan 21, 2009 at 07:45:08AM -0800, Ian Mallett wrote: >> >>> math.hypot() is good for distance calculation. >> >> I did some microbenchmarks a while ago, and math.hypot() was faster than >> x**2 + y**2. I was surprised. >> > Out of curiousity, did you also try x*x + y*y? Yes. Actually, since I was using a vector class, it was self.x * self.x, and I think the speedup of using math.hypot(self.x, self.y) over self.x*self.x + self.y*self.y could be explained by reducing by half the overhead of getattr. > If it's using general > purpose exponentiation routines I could see that being slower than a > square root. Or it could be dynamic dispatch/type checks for using multiple operations (two multiplications/exponentiations, and one addition) over using a single primitive implemented in C. Anyway, it all depends heavily on the actual implementation. The timeit module is your friend. I just wanted to chime in with praise for math.hypot which is often overlooked. Marius Gedminas -- Lisp-style macros [...] are to C-style macros what Emacs is to cat. -- Jacek Generowicz
Attachment:
signature.asc
Description: Digital signature