[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
**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.
`