David,
I did read the help page. All it says is
log1p(x) computes *log(1+x)* accurately also for *|x| << 1* (and less
accurately when *x is approximately -1*).
This gives me pause. Does it mean that log(x) does not give accurate
results? If log1p gives more accurate values than log, why is the log
function not written to use the more accurate computation performed by
log1p. I don't believe I can look directly at the code for log and log1p,
so I need to rely on the kindness of others to explain the differences
between the computations performed by the functions. I guess the test I
ran, log1p(0.000001)/log(0.000001+1), did not have enough precision to
demonstrate a difference between the two functions.
John
John David Sorkin M.D., Ph.D.
Professor of Medicine
Chief, Biostatistics and Informatics
University of Maryland School of Medicine Division of Gerontology and
Geriatric Medicine
Baltimore VA Medical Center
10 North Greene Street
GRECC (BT/18/GR)
Baltimore, MD 21201-1524
(Phone) 410-605-7119
(Fax) 410-605-7913 (Please call phone number above prior to faxing)
David Winsemius <dwinsemius at comcast.net> 12/12/16 12:05 PM >>>
On Dec 12, 2016, at 8:53 AM, John Sorkin <jsorkin at grecc.umaryland.edu>
At the risk of being flamed . . .
What is the difference between log1p(x) and log(x+1)?
The two methods appear to give the same results:
log1p(0.000001)/log(0.000001+1)
Read the help page more carefully.
--
David.
John David Sorkin M.D., Ph.D.
Professor of Medicine
Chief, Biostatistics and Informatics
University of Maryland School of Medicine Division of Gerontology and
Geriatric Medicine
Baltimore VA Medical Center
10 North Greene Street
GRECC (BT/18/GR)
Baltimore, MD 21201-1524
(Phone) 410-605-7119
(Fax) 410-605-7913 (Please call phone number above prior to faxing)
William Dunlap via R-help <r-help at r-project.org> 12/12/16 11:38 AM
log1p(x), in the base package computes log(1+x) accurately for small x
(and
large).
E.g.,
options(digits=16)
base::log1p(1e-14)
base::log1p(1e-14) - base::log(1+1e-14)
[1] 7.992778373591124e-18
as.numeric(log(Rmpfr::mpfr(1,precBits=1000) + Rmpfr::mpfr(1e-14,
precBits=1000))) - log1p(1e-14)
[1] 0
Bill Dunlap
TIBCO Software
wdunlap tibco.com
On Mon, Dec 12, 2016 at 8:23 AM, Faradj Koliev <faradj.g at gmail.com>
wrote:
Hi all,
How do I perform log(x+1) in R?
log1p_trans() from the package ?scales" doesn?t seem to work for me.
Best,
Faradj