En Mon, 30 May 2011 06:46:01 -0300, Peter Otten <__pete...@web.de>
escribió:

Gabriel wrote:

Well, the subject says it almost all: I'd like to write a small Vector
class for arbitrary-dimensional vectors.


class Vector(object):
...     def __init__(self, *coords):
...             self._coords = coords
...     def __abs__(self):
...             return math.sqrt(sum(x*x for x in self._coords))
...
import math
abs(Vector(1,1))
1.4142135623730951
abs(Vector(3,4))
5.0

Using math.fsum instead of sum may improve accuracy, specially when len(coords)≫2

py> import math
py>
py> def f1(*args):
...   return math.sqrt(sum(x*x for x in args))
...
py> def f2(*args):
...   return math.sqrt(math.fsum(x*x for x in args))
...
py> pi=math.pi
py> args=[pi]*16
py> abs(f1(*args)/4 - pi)
4.4408920985006262e-16
py> abs(f2(*args)/4 - pi)
0.0


--
Gabriel Genellina

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to