[R] About 'choose' function
(Ted Harding)
Ted.Harding at nessie.mcc.ac.uk
Mon Nov 8 16:11:37 CET 2004
On 08-Nov-04 Ted Harding wrote:
> [...]
>
> > choose(60000000000,31)
> [1] 1.612899e+300
>
> [...]
>
> my.choose3<-function(x,y){
> if((x==y)||(y==0)) return(1);
> m <- min(y,x-y)
> prod(seq(x,(x-m+1),by=-1)/(seq(m,1,by=-1)))
> }
>
> when
>
> my.choose3(60000000000,31)
> [1] 1.613121e+300
>
> which has a slight difference (0.014% greater) from the result of
> 'choose'.
>
> Given the method of computation, I might feel inclined to trust
> 'my.choose3' rather than 'choose', but I'm not at sure of this
> without studying the internal code of 'choose', and would welcome
> comments!
I just did this calculation using 'bc' (which works to arbitrary
decimal precision), getting (after rounding 59999999999.99...996,
1744 9's in all, to 60000000000):
16131211663389665874291103209859887097643782097733433535176164529013\
93347758720756812586746724689691665340326913939172715147819303293449\
54257506586926613288215108141984988883561331127046497391143349652601\
81932350377398578090978006727056282867666693363201127636940304448887\
82022049197129032260000000000
so the leading digits are 1613121..., agreeing with 'my.choose3'
as above, rather than with 'choose'!
Ted.
--------------------------------------------------------------------
E-Mail: (Ted Harding) <Ted.Harding at nessie.mcc.ac.uk>
Fax-to-email: +44 (0)870 094 0861 [NB: New number!]
Date: 08-Nov-04 Time: 15:11:37
------------------------------ XFMail ------------------------------
More information about the R-help
mailing list