[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: [ANN] LuaProfiler 2.0
- From: Rici Lake <lua@...>
- Date: Tue, 14 Jun 2005 23:55:39 -0500
On 14-Jun-05, at 7:19 PM, Chris Marrin wrote:
I have gotten recent experience with QueryPerformanceCounter(). I
naively tried to get its value and divide it by the value in
QueryPerformanceFrequency(), first converting both to doubles. I found
that this conversion reduced the precision down to about 100ms. This
is because on my shiny new 3GHz P4 machine, the frequency is 3GHz!
That means the counter increments by 3 billion every second. Since
it's a 64 bit counter it will still not rollover for about 200 years.
But if your machine has been running for a month or so like mine was,
the number gets too big to be represented very precisely by a double!
I find this a bit puzzling. A double has 53 bits of precision. A day
has 86400 seconds; log2 of 86400*3e9 is 47.88; in other words, a double
can accurately represent a number of 3GHz ticks up to a bit over 34
days. After that, it should lose one bit of precision, which should be
barely noticeable. In a year, you would lose less than four bits of
precision. If you are reduced to a precision of 100ms, you are losing
something like 28 bits of precision. This suggests that you were doing
arithmetic with floats rather than doubles; floats have 24 bits of
precision, or 29 less than doubles, which would work out to about the
loss you are reporting.