[SciPy-user] floating point pedagogical problem

Ryan Krauss ryanlists at gmail.com
Mon Jun 25 19:52:02 EDT 2007


I have  a floating point issue that is forcing me to teach my students
more python/computer science than I want to:

In [36]: temp
Out[36]: NumPy array, format: long
[-1.         -0.83045267 -0.64773663 -0.45185185 -0.24279835 -0.02057613
  0.21481481  0.46337449  0.72510288  1.        ]

In [37]: arccos(temp)
Out[37]: NumPy array, format: long
[                  nan            2.55071609            2.27540616
            2.03963643            1.81604581            1.59137391
            1.35429411            1.08899693            0.75961255
                   nan]


We are doing a robotics problem involving inverse kinematics where
they need to take the arccos and arcsin of some vectors.  The problem
is that
In [38]: eps=1e-15

In [39]: -1-eps < temp[0] < -1+eps
Out[39]: True

So, my current solution is to check for theta +/- 1 +/- eps problems like this:

tempout = []
for item in temp:
	if -1-eps<item<-1+eps:
		tempout.append(-1.0)
	elif 1-eps<item<1+eps:
		tempout.append(1.0)
	else:
		tempout.append(item)
tempout = array(tempout)

Is there a better way?  Is making arccos and arcsin check for +/-1 +/-
eps reasonable?  Or should I give a lecture on floating point evils?

Ryan



More information about the SciPy-User mailing list