[Rd] Different results for tan(pi/2) and tanpi(1/2)

William Dunlap wdunlap at tibco.com
Fri Sep 9 22:12:58 CEST 2016


Other examples of functions like this are log1p(x), which is log(1+x)
accurate for small x, and expm1(x), which is exp(x)-1 accurate for small
x.  E.g.,
  > log1p( 1e-20 )
  [1] 1e-20
  > log( 1 + 1e-20 )
  [1] 0
log itself cannot be accurate here because the problem is that 1 == 1 +
1e-20 in double precision arithmetic (52 binary digits of precision).



Bill Dunlap
TIBCO Software
wdunlap tibco.com

On Fri, Sep 9, 2016 at 12:58 PM, Greg Snow <538280 at gmail.com> wrote:

> If pi were stored and computed to infinite precision then yes we would
> expect tan(pi/2) to be NaN, but computers in general and R
> specifically don't store to infinite precision (some packages allow
> arbitrary (but still finite) precision) and irrational numbers cannot
> be stored exactly.  So you take the value of the built in variable pi,
> which is close to the theoretical value, but not exactly equal, divide
> it by 2 which could reduce the precision, then pass that number (which
> is not equal to the actual irrational value where tan has a
> discontinuity) to tan and tan returns its best estimate.
>
> Using finite precision approximations to irrational and other numbers
> that cannot be stored exactly can have all types of problems at and
> near certain values, that is why there are many specific functions for
> calculating in those regions.
>
>
>
>
>
> On Fri, Sep 9, 2016 at 12:55 PM, Hans W Borchers <hwborchers at gmail.com>
> wrote:
> > The same argument would hold for tan(pi/2).
> > I don't say the result 'NaN' is wrong,
> > but I thought,
> > tan(pi*x) and tanpi(x) should give the same result.
> >
> > Hans Werner
> >
> >
> > On Fri, Sep 9, 2016 at 8:44 PM, William Dunlap <wdunlap at tibco.com>
> wrote:
> >> It should be the case that tan(pi*x) != tanpi(x) in many cases - that
> is why
> >> it was added.  The limits from below and below of the real function
> >> tan(pi*x) as x approaches 1/2 are different, +Inf and -Inf, so the
> limit is
> >> not well defined.   Hence the computer function tanpi(1/2) ought to
> return
> >> Not-a-Number.
> >>
> >> Bill Dunlap
> >> TIBCO Software
> >> wdunlap tibco.com
> >>
> >> On Fri, Sep 9, 2016 at 10:24 AM, Hans W Borchers <hwborchers at gmail.com>
> >> wrote:
> >>>
> >>> As the subject line says, we get different results for tan(pi/2) and
> >>> tanpi(1/2), though this should not be the case:
> >>>
> >>>     > tan(pi/2)
> >>>     [1] 1.633124e+16
> >>>
> >>>     > tanpi(1/2)
> >>>     [1] NaN
> >>>     Warning message:
> >>>     In tanpi(1/2) : NaNs produced
> >>>
> >>> By redefining tanpi with sinpi and cospi, we can get closer:
> >>>
> >>>     > tanpi <- function(x) sinpi(x) / cospi(x)
> >>>
> >>>     > tanpi(c(0, 1/2, 1, 3/2, 2))
> >>>     [1]    0  Inf    0 -Inf    0
> >>>
> >>> Hans Werner
> >>>
> >>> ______________________________________________
> >>> R-devel at r-project.org mailing list
> >>> https://stat.ethz.ch/mailman/listinfo/r-devel
> >>
> >>
> >
> > ______________________________________________
> > R-devel at r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-devel
>
>
>
> --
> Gregory (Greg) L. Snow Ph.D.
> 538280 at gmail.com
>

	[[alternative HTML version deleted]]



More information about the R-devel mailing list