[Numpy-discussion] what goes wrong with cos(), sin()

Charles R Harris charlesr.harris at gmail.com
Wed Feb 21 18:54:52 EST 2007


On 2/21/07, Charles R Harris <charlesr.harris at gmail.com> wrote:
>
>
>
> On 2/21/07, Timothy Hochberg <tim.hochberg at ieee.org> wrote:
> >
> >
> >
> > On 2/21/07, Charles R Harris < charlesr.harris at gmail.com> wrote:
> > >
> > >
> > >
> > > On 2/21/07, Robert Kern < robert.kern at gmail.com> wrote:
> > > >
> > > > Christopher Barker wrote:
> > > > > Robert Kern wrote:
> > > > >> Christopher Barker wrote:
> > > > >>> I wonder if there are any C math libs that do a better job than
> > > > you'd
> > > > >>> expect from standard FP? (short of unlimited precision ones)
> > > > >> With respect to π and the zeros of sin() and cos()? Not really.
> > >
> > >
> > > <snip>
> > >
> > > Well, you can always use long double if it is implemented on your
> > > > platform. You
> > > > will have to construct a value for π yourself, though. I'm afraid
> > > > that we don't
> > > > really make that easy.
> > > >
> > > > --
> > >
> > >
> > > pi = 3. 1415926535 8979323846 2643383279 5028841971 6939937510
> > > 5820974944 5923078164 0628620899 8628034825 3421170679 8214808651 *...
> > >
> > > *
> > > I dont know what that looks like when converted to long double.
> > > Lessee,
> > >
> > > In [1]: import numpy
> > >
> > > In [2]: pi = numpy.float128(3.1415926535897932384626433832795028841971
> > > )
> > >
> >
> > I think this is where you go wrong. Your string of digits is first a
> > python float and *then* is converted to a long double. In the intermediate
> > stage it gets truncated and you don't get the precision back.
> >
>
> True. But there is missing functionality here.
>
> In [4]: pi = numpy.float128('3.1415926535897932384626433832795028841971')
> ---------------------------------------------------------------------------
>
> exceptions.TypeError                                 Traceback (most
> recent call last)
>
> /home/charris/workspace/microsat/daemon/<ipython console>
>
> TypeError: a float is required
>
> It's somewhat pointless to have a data type that you can't properly
> initialize. I think the string value should work, it works for python types.
>
>

OTOH, the old way does give extended precision for pi

In [8]: numpy.arctan2(numpy.float128(1), numpy.float128(1))*4
Out[8]: 3.14159265358979323851

Chuck
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20070221/3094fdef/attachment.html>


More information about the NumPy-Discussion mailing list