[SciPy-user] floating point pedagogical problem
Ryan Krauss
ryanlists at gmail.com
Mon Jun 25 20:08:57 EDT 2007
Thanks Robert. The clip solution is much less frightening than my 10
mysterious lines of code.
On 6/25/07, Robert Kern <robert.kern at gmail.com> wrote:
> Ryan Krauss wrote:
> > 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?
>
> clip(temp, -1.0, 1.0)
>
> That will silently allow obviously bogus values like 1.5, but you may not care
> overmuch for the problem.
>
> > Is making arccos and arcsin check for +/-1 +/-
> > eps reasonable?
>
> I don't think so. eps may not be the appropriate fuzz-factor for the problem.
>
> > Or should I give a lecture on floating point evils?
>
> Are they using floating point? If so, then yes, they need to know about the
> little buggers.
>
> For domain issues like this, though, it's simple enough to say that floating
> point introduces inaccuracies and sometimes functions that have restricted
> domains require some extra care to clip inputs to the domain.
>
> --
> Robert Kern
>
> "I have come to believe that the whole world is an enigma, a harmless enigma
> that is made terrible by our own mad attempt to interpret it as though it had
> an underlying truth."
> -- Umberto Eco
> _______________________________________________
> SciPy-user mailing list
> SciPy-user at scipy.org
> http://projects.scipy.org/mailman/listinfo/scipy-user
>
More information about the SciPy-User
mailing list