On Mon, Feb 14, 2011 at 02:45:49PM -0800, David Wolfskill wrote: > I am acquiring some sampled data that is time-stamped (with a > POSIXct). Some of the data is in the form of "counters" -- that > is, what is interesting isn't value of a given counter at a given > time, but the change in the counter from one sample to a later one. > > As the counters are only incremented, they would be perceived to be > monotonically increasing -- ideally. Unfortunately, the counters can > "wrap," with the effect being that a later value may appear to be > smaller than an earlier one. > > Other code I've seen (in C) that works with these counters merely casts > the counters to (unsigned) before calculating the difference, then casts > the result as (int). Subject to the constraint that this trick only > works if the system doing the calculation has the same size "int" as the > target system, and assumes that negative numbers are represented in > "twos-complement" form, it works well enough. > > [E.g., suppose we are using 4-bit counters, 0 .. 15]. If a counter > at T0 is (say) 14 and the value of the counter at T1 is (say) 3, > the usual arithmetic would say that the difference is > > 3 - 14 => -11 > > But if we (instead) calculate > > (int)((unsigned)3 - (unsigned)4) => 5 > > which works out to be correct.] > > Is there a way to do something similar to this in R?
The arithmetic of unsigned integers between 0 and 2^k - 1 is the same as the arithmetic mod 2^k. This suggests the following approach (3 - 14) %% 16 [1] 5 Hope this helps. Petr Savicky. ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.