@Steff, I totally "get" your question. You have some function that is called repeatedly and you want to know the total elapsed time spent in that function. So you want to get a TOD on the way in, subtract it from a TOD on the way out, and then sum those differences. Makes perfect sense. And you are worried that you are factoring in 12 irrelevant bits that may add up over time.
You are (mostly) mathematically correct but if it were me I would not worry about it. First of all, I suspect that in modern machines the actual clock resolution is a lot finer than 1 usecond, so not all of those 12 bits are irrelevant. Second, I suspect much of the error would cancel itself out. But yes, I don't really know, and worst case, you could be off by almost a usecond on every difference, and after a few thousand sums it might amount to something. What to do? Well, you could just AND off those 12 bits. Little harm, although on a box with finer resolution you are throwing away information that might be relevant. How about just using STCKF; it has two benefits: first, as the name implies, it is FASTER than an STCK in certain circumstances -- much faster (the exact circumstances are irrelevant to this discussion, but trust me, it is a LOT faster sometimes). And second, the PoOp says "For STORE CLOCK FAST, when the value of a running clock is stored, bits to the right of the rightmost bit that is incremented are stored as zeros." QED Charles -----Original Message----- From: IBM Mainframe Discussion List [mailto:[email protected]] On Behalf Of Steff Gladstone Sent: Thursday, November 26, 2020 7:08 AM To: [email protected] Subject: Calculating duration from subtracting TOD clocks Could someone answer 4gb's 11-year-late question? On Tuesday, April 17, 2018 at 11:53:30 PM UTC+3, [email protected] wrote: > On Monday, September 3, 2007 at 4:38:21 PM UTC-7, Ludmila Koganer wrote: > > Hi, > > I need to subtract two TOD times to find elapsed time. Currently I convert > > the two TOD times with STCKCONV and determine the elaped time individually, > > and then compute the difference. This works. However I thought I could > > optimize the conversion, a little bit and I was wondering why not subtract the > > two TOD times to begin with. > > > > As I understand TOD time is the number of mic seconds elapsed since midnight > > of 1900-01-01. So when I subtract one TOD value from another the duration > > must be in micro seconds. > I'm 11 years late. Shouldn't you clear the low order 12 bits of each TOD value before adding or subtracting them? Those low order bits are not fractions of a microsecond, so including them in the math can produce up to a micro second error. If you add a series of TOD values without clearing the low bits that can add up to real money. ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to [email protected] with the message: INFO IBM-MAIN
