From: Martin Maechler <maechler_at_stat.math.ethz.ch>

Date: Mon 04 Jul 2005 - 17:33:31 EST

* >>
*

>> Not quite... (see below)

* >>
*

* >>
*

* >>
*

>> $root

* >> [1] 171.6244
*

* >>
*

* >> $f.root
*

* >> [1] -1.462051e-07
*

* >>
*

* >> $iter
*

* >> [1] 3
*

* >>
*

* >> $estim.prec
*

* >> [1] 6.103516e-05
*

* >>
*

* >>
*

* >> --
*

* >> O__ ---- Peter Dalgaard ุster Farimagsgade 5, Entr.B
*

* >> c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K
*

* >> (*) \(*) -- University of Copenhagen Denmark Ph: (+45)
*

* >> 35327918
*

* >> ~~~~~~~~~~ - (p.dalgaard@biostat.ku.dk) FAX: (+45)
*

* >> 35327907
*

* >>
*

R-help@stat.math.ethz.ch mailing list

https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Mon Jul 04 17:36:44 2005

Date: Mon 04 Jul 2005 - 17:33:31 EST

>>>>> "William" == William H Asquith <wasquith@austin.rr.com> >>>>> on Sun, 3 Jul 2005 16:00:40 -0500 writes:

William> Great, but to followup, how do I select the bounds (B,E) on the root William> for an arbitrary machine?

William> OVER = uniroot(function(x) lgamma(x)-log(.Machine$double.xmax), William> c(B,E))$root

William> If uniroot() is fast enough, is it appropriate for me to set B at say 1 William> and E at log(.Machine$double.max)? Suggestions on do this the proper William> "R way"? Perhaps this . . .

William> OVER = uniroot(function(x) lgamma(x)-log(.Machine$double.xmax), William> c(1,log(.Machine$double.xmax)))$root

William> I am working on a package so different machines will be involved thus William> simple 171,172 might not be the best idea for the root?

Well,

- We nowadays *require* compliance with the usual ``IEEE arithmetic standard'' {put a bit too simplistically} and I'd bet that those compiler / runtime library combinations that can build R properly, would also give cutoffs in this same interval
- lgamma(x) is very linear ``out there'' -- try
curve(lgamma(x) - log(.Machine$double.xmax), 170, 180)
- so you can easily enlarge the interval a bit, e.g. to (170,175) or even to (100,200)

Martin

William> On Jul 3, 2005, at 3:43 PM, Peter Dalgaard wrote:

>> "William H. Asquith" <wasquith@austin.rr.com> writes:

* >>
*

>>> I am porting some FORTRAN to R in which an Inf triggers an if(). The >>> trigger is infinite on exp(lgamma(OVER)). What is the canonical R >>> style of determining OVER when exp(OVER)== Inf? The code structure >>> that I am >>> porting is best left intact--so I need to query R somehow to the value >>> of OVER that causes exp(lgamma(OVER)) to equal Inf. >>> >>> On my system, >>> exp(lgamma(171)) is about first to equal Inf. >>> >>> I asked similar question a few weeks ago on exp(OVER) and got the >>> answer back as log(.Machine$double.xmax). I now have the lgamma >>> involved. I think that answer is what is OVER such the >>> >>> .Machine$double.xmax = lgamma(OVER),

>> Not quite... (see below)

>>> but I am not sure how to invert or solve for OVER

>>> uniroot(function(x) lgamma(x)-log(.Machine$double.xmax), c(171,172))

>> $root

William> ______________________________________________ William> R-help@stat.math.ethz.ch mailing listWilliam> https://stat.ethz.ch/mailman/listinfo/r-help William> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

William> !DSPAM:42c852c3295961260279199!

R-help@stat.math.ethz.ch mailing list

https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Mon Jul 04 17:36:44 2005

*
This archive was generated by hypermail 2.1.8
: Fri 03 Mar 2006 - 03:33:11 EST
*