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 > >
tanpi(x) should be more accurate than tan(pi*x), especially near multiples of pi/2. Bill Dunlap TIBCO Software wdunlap tibco.com On Fri, Sep 9, 2016 at 11:55 AM, 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 > > > > >[[alternative HTML version deleted]]
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
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]]
Possibly Parallel Threads
- Different results for tan(pi/2) and tanpi(1/2)
- Different results for tan(pi/2) and tanpi(1/2)
- Different results for cos,sin,tan and cospi,sinpi,tanpi
- Different results for cos,sin,tan and cospi,sinpi,tanpi
- Different results for cos,sin,tan and cospi,sinpi,tanpi