TickDuration deprecation

Jon Degenhardt jond at noreply.com
Wed Nov 22 07:48:34 UTC 2017


On Wednesday, 22 November 2017 at 05:50:53 UTC, Walter Bright 
wrote:
> There is another, perhaps obsolete, consideration.
>
> Some CPUs do not have floating point units. C, for example, is 
> carefully set up so that when you don't need floating point, it 
> isn't required to have an FPU. This made C usable on cheap 
> processors.
>
> It's sorta like "why is the GC linked in even though I never 
> used it?"

Hi Walter - I wonder if there is a miscommunication. My 
understanding is that the question is whether there should be a 
built-in conversion from Duration to float/double in a specific 
unit of measure, like milliseconds. It sounds as if your concern 
is more to ensure that the time package not be required to 
support something other than integral values in its internal 
operations.

Perhaps there is an alternative perspective, but being able to 
convert a Duration to a double in a specific unit of measure 
would not seem to place any burden on the time package to support 
the result of conversion as a first class time object. In this 
view, what happens with the converted value is entirely in the 
hands of the end user, not the time package. If the user decides 
to use the double in a mathematical operation, floating point 
round off error is the responsibility of the user, not the time 
package.

To give a concrete example of why this is conversion is useful - 
I often do performance analysis involving service calls that take 
from single digit milliseconds to hundreds of milliseconds, with 
standard deviations in that ballpark. I might use tens of 
thousands of timing samples and analyze those samples using stats 
and graphing packages. Those packages all use doubles, and it is 
generally convenient to work in units appropriate for the 
measurements being done, milliseconds in the case I described. In 
this case, the last step in generating a timing value is to 
convert to milliseconds as a double and store it somewhere, often 
a log file. These will be read back in by the stats/graphing 
package, where follow-up processing will be done.

In the older version of StopWatch, this last step conversion 
could be done with a call like:

     double ms = sw.peek.to!("msecs", double));

In the new version, a call needs to be something like:

     double ms = sw.peek.total!("hnsecs").to!double / 1e+04);

The latter form is more error prone and less clear about intent, 
etc. It sounds as the rationale for depreciating the previous 
form of conversion is because the end user may incur floating 
point round-off error by performing mathematical operations on 
the double value. The user can still perform the conversion, but 
must go to greater effort. It sounds as if the other part of the 
rationale is that conversion is likely to be rare. In my 
experience, this is not the case.


More information about the Digitalmars-d mailing list