Message-ID: <20110107175450.GA15574@praha1.ff.cuni.cz>
Date: 2011-01-07T17:54:50Z
From: Petr Savicky
Subject: how to calculate this natural logarithm
In-Reply-To: <201101080020557148176@yahoo.com.cn>
On Sat, Jan 08, 2011 at 12:20:59AM +0800, zhaoxing731 wrote:
> Hello
>
> I want to calculate natural logarithm of sum of combinations as follow: (R code)
>
> {
> com_sum=choose(2000000,482)*choose(1000000,118)+choose(2000000,483)*choose(1000000,117)+...+choose(2000000,i)*choose(1000000,600-i)+...+choose(2000000,600)*choose(1000000,0) #calculate the sum
> result=log(com_sum) #calculate the log of the sum
> }
>
> But every element of the com_sum is Inf, so I can't get the result
> Thank you in advance
The natural logarithm of choose() is lchoose(), so the
natural logarithms of the products above are
i <- 482:600
logx <- lchoose(2000000,i) + lchoose(1000000,600-i)
maxlog <- max(logx)
# [1] 5675.315
The sum of numbers, which have very different magnitudes, may
be approximated by their maximum, so max(logx) is an
approximation of the required logarithm. A more accurate
calculation can be done, for example, as follows
maxlog + log(sum(exp(logx - maxlog)))
# [1] 5675.977
Petr Savicky.