IEEE 754 Style Arithmetic
Martin Maechler <email@example.com>
Wed, 7 Jan 1998 09:00:24 +0100
>>>>> "Ross" == Ross Ihaka <firstname.lastname@example.org> writes:
Ross> I have been looking at the R mathematical library with a view to
Ross> making changes so that it will handle IEEE 754 entities like NaN
Ross> and +/- Inf. This appears to be not too hard and I am fairly
Ross> well down the path to converting the existing code (and
Ross> simultaneously converting some of the more suspect algorithms to
Ross> something more solid).
Thank you -- this has been my longest lasting wish for R...
(has Heiner Schwarte contacted you, yet?
during holiday season, he has almost finished doing the same
while successfully porting R 0.61 to Windows NT (!!!) (MS C compiler)
Ross> I have looked at the Splus implementation and I have a bit of a
Ross> problem with some of the decisions that have been made. For
Ross> pnorm(0, 1, Inf) -> 0.5
Ross> This seems VERY dangerous to me. It's the kind of thing which
Ross> could make errors almost impossible to find. I would much rather
Ross> that this generated NaN (it's a domain error in my view).
I disagree quite strongly.
You are right, that some errors are harder to track down when Inf & -Inf
But in my oppinion the advantages really do abound.
for(s in 10^(0:9))cat("sd=",formatC(s,wid=5),"pnorm(0,1,sd)=",pnorm(0,1,s),"\n")
sd= 1 pnorm(0,1,sd)= 0.1586553
sd= 10 pnorm(0,1,sd)= 0.4601722
sd= 100 pnorm(0,1,sd)= 0.4960106
sd= 1000 pnorm(0,1,sd)= 0.4996011
sd= 1e+04 pnorm(0,1,sd)= 0.4999601
sd= 1e+05 pnorm(0,1,sd)= 0.499996
sd= 1e+06 pnorm(0,1,sd)= 0.4999996
sd= 1e+07 pnorm(0,1,sd)= 0.5
sd= 1e+08 pnorm(0,1,sd)= 0.5
sd= 1e+09 pnorm(0,1,sd)= 0.5
I think one of the merits of useful IEEE implementations is
continuity (in the mathematical sense)
and ``automatic fulfillment'' of limit theorems.
This has been very useful for me in several situations of S-plus code
And I have been longing for these to be available in R, as well.
Ross> There are some other nits like this too. Would it be a serious
Ross> problem if I were to "fix" these?
yes (see above).
Ross> At present, the functions returning information about discrete
Ross> distributions work on integer (32-bit C int) arguments. This
Ross> limits the domain for these functions. Has anyone found that
Ross> that this is a problem?
How much speed would be lost, if they worked for all double (and Inf, -Inf)
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !) To: email@example.com