[R] Best way to compute a sum

Roger Deangelis xlr82sas at gmail.com
Sun Jul 4 02:27:09 CEST 2010


Hi Bernado,

In many financial applications if you convert the dollars and cents to
pennies( ie $1.10 to 110) and divide by 100 at the vary end you can get
maintain higher precision. This applies primarily to sums. This is similar
to keeping track of the decimal fractions which have exact representations
in floating point. It is good to know where the errors come from.

I suppose you could also improve the sum by understanding the decimal to
binary rounding algorithms. I have noticed differences in computations
between Sun hardware(FPUs) and Intel(FPUs). When presented the same set of
operations, it appears that the floating point hardware do not do the
operations in the same order.  

Consider

   sprintf("%a", sum(rep(1.1,100)))     # overestimates the sum
"0x1.b800000000001p+6"
  "0x1.b800000000001p+6"

  sprintf("%a", sum(rep(11,100))/10)   # this gives the correct answer
"0x1.b8p+6"
  110 = 10 1110 = 32 + 8 + 4 + 2 - "0x1.b8p+6" - tricky due to 53 bit and
little endian (I think this is right)
  "0x1.b8p+6"

  note
   cmp <- ifelse (sum(rep(1.1,100))==sum(rep(11,100))/10, "equal",
"unequal")
 
[1] "unequal"

   cmp <- ifelse (sum(rep(1.1,100))>sum(rep(11,100))/10, "greater than",
"less than orequal")
  
[1] "greater than"
-- 
View this message in context: http://r.789695.n4.nabble.com/Best-way-to-compute-a-sum-tp2267566p2277489.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list