[Rd] sum overflow (PR#1091)
Martin Maechler
Martin Maechler <maechler@stat.math.ethz.ch>
Sat, 15 Sep 2001 10:18:03 +0200
>>>>> "BDR" == Prof Brian Ripley <ripley@stats.ox.ac.uk> writes:
BDR> On Thu, 13 Sep 2001, Bill Simpson wrote:
>> > It's not a problem with sum:
>> >
>> > > sum(a*a)
>> > [1] 333833500
>> > > sum(b*b)
>> > [1] 333833500
>> >
>> > are accurate.
>> >
>> > The overflow is in the integer arithmetic for *. That's a question for
>> > your C run-time system. On a 64-bit machine you might get different
>> > results (although most use 32-bit ints, including mine).
>> >
>> > If you use integers you need to be aware of the consequences. It's a
>> > feature not a bug.
>> I thought R used an internal rep that was double in all cases.
BDR> Assumed, I guess, as I've never seen that in the manuals.
>> Now I'm confused:
>> > a<-(1:1000)
>> > b<-(1:1000)
>> > sum(a*a)*sum(b*b)
>> [1] -652010736
>> > a<-(1:1000)/1.0
>> > b<-(1:1000)/1.0
>> > sum(a*a)*sum(b*b)
>> [1] 1.114448e+17
>>
>> So R somehow decides whether to use an integer or a double
>> representation? Please tell me the rule used by R so I will know in the
>> future.
BDR> It uses what you tell it to in general. Integers will be handled as
BDR> integers, but as in C integer/numeric gives a numeric. Rather than
BDR> learn rules, use typeof or storage.mode as in
>> typeof(1:1000)
BDR> [1] "integer"
BDR> to find out, or make explicit coercions (as.numeric) if you want
BDR> to make assumptions about objects.
BDR> At present you are only likely to get integers from m:n and
BDR> similar seq() calls, and from unclass on a factor.
also length() and dim()
on which I even rely in .C() calls when not using explicit as.integer()
there [but many will tell me that was not "defensive" and un-wise].
BDR> But no one is saying that will not change in the future (and it
BDR> did from S3 to S4). And you could always have a user who used
BDR> as.integer explicitly.
indeed!
--
Martin Maechler <maechler@stat.math.ethz.ch> http://stat.ethz.ch/~maechler/
Seminar fuer Statistik, ETH-Zentrum LEO D10 Leonhardstr. 27
ETH (Federal Inst. Technology) 8092 Zurich SWITZERLAND
phone: x-41-1-632-3408 fax: ...-1228 <><
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
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: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._