I'm reading the library reference for core.time and It says that the duration is taken in "hnsecs" and I cannot understand if we can change that and choose the precision. Does anyone know if we can do that?
Thread overview | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
July 09, 2021 Can I get the time "Duration" in "nsecs" acurracy? | ||||
---|---|---|---|---|
| ||||
July 09, 2021 Re: Can I get the time "Duration" in "nsecs" acurracy? | ||||
---|---|---|---|---|
| ||||
Posted in reply to rempas | On Friday, 9 July 2021 at 20:43:48 UTC, rempas wrote: >I'm reading the library reference for core.time and It says that the duration is taken in "hnsecs" and I cannot understand if we can change that and choose the precision. Does anyone know if we can do that? It is stored internally in "hnsecs", but you can convert it to other units using the |
July 09, 2021 Re: Can I get the time "Duration" in "nsecs" acurracy? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Paul Backus | On 7/9/21 1:54 PM, Paul Backus wrote:
> On Friday, 9 July 2021 at 20:43:48 UTC, rempas wrote:
>> I'm reading the library reference for [core.time](https://dlang.org/phobos/core_time.html#Duration) and It says that the duration is taken in "hnsecs" and I cannot understand if we can change that and choose the precision. Does anyone know if we can do that?
>
> It is stored internally in "hnsecs", but you can convert it to other units using the `total` method [1]; for example, `myDuration.total!"nsecs"`.
>
> [1] https://dlang.org/phobos/core_time.html#.Duration.total
Yes but the resolution seems not to be better than 100 nsecs. A quick research reveals a better resolution is not possible with common hardware on at least Linux.
The following program always prints multiples of 100 on my Mint OS:
import std.stdio;
import core.thread;
import std.datetime.stopwatch;
void main() {
auto sw = StopWatch();
sw.start();
foreach (_; 0..10) {
Thread.sleep(0.nsecs);
writefln("%,s", sw.peek.total!"nsecs");
}
}
Ali
|
July 09, 2021 Re: Can I get the time "Duration" in "nsecs" acurracy? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Paul Backus | On Friday, 9 July 2021 at 20:54:21 UTC, Paul Backus wrote: >On Friday, 9 July 2021 at 20:43:48 UTC, rempas wrote: >I'm reading the library reference for core.time and It says that the duration is taken in "hnsecs" and I cannot understand if we can change that and choose the precision. Does anyone know if we can do that? It is stored internally in "hnsecs", but you can convert it to other units using the It doesn't work for me. I have the following code:
and I get the following error message: "Error: cannot implicitly convert expression `dur.total()` of type `long` to `Duration`" |
July 09, 2021 Re: Can I get the time "Duration" in "nsecs" acurracy? | ||||
---|---|---|---|---|
| ||||
Posted in reply to rempas | On Friday, 9 July 2021 at 21:13:02 UTC, rempas wrote: >
What are you trying to do, assigning a nanosecond value to a Duration? The Duration already has that many nanoseconds in it. >and I get the following error message: "Error: cannot implicitly convert expression `dur.total()` of type `long` to `Duration`" |
July 09, 2021 Re: Can I get the time "Duration" in "nsecs" acurracy? | ||||
---|---|---|---|---|
| ||||
Posted in reply to rempas | On Friday, 9 July 2021 at 21:13:02 UTC, rempas wrote: >On Friday, 9 July 2021 at 20:54:21 UTC, Paul Backus wrote: >On Friday, 9 July 2021 at 20:43:48 UTC, rempas wrote: >I'm reading the library reference for core.time and It says that the duration is taken in "hnsecs" and I cannot understand if we can change that and choose the precision. Does anyone know if we can do that? It is stored internally in "hnsecs", but you can convert it to other units using the It doesn't work for me. I have the following code:
and I get the following error message: "Error: cannot implicitly convert expression `dur.total()` of type `long` to `Duration`" You cannot change the precision of
— Bastiaan. |
July 09, 2021 Re: Can I get the time "Duration" in "nsecs" acurracy? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli | On 7/9/21 5:04 PM, Ali Çehreli wrote: >On 7/9/21 1:54 PM, Paul Backus wrote: >On Friday, 9 July 2021 at 20:43:48 UTC, rempas wrote: >I'm reading the library reference for core.time and It says that the duration is taken in "hnsecs" and I cannot understand if we can change that and choose the precision. Does anyone know if we can do that? It is stored internally in "hnsecs", but you can convert it to other units using the Yes but the resolution seems not to be better than 100 nsecs. A quick research reveals a better resolution is not possible with common hardware on at least Linux. The following program always prints multiples of 100 on my Mint OS: import std.stdio; void main() { foreach (_; 0..10) { You can get better than hnsecs resolution with However, Note also that hnsecs is the base unit for Windows high precision clocks, though their epoch is year 1600 instead of year 0. -Steve |
July 10, 2021 Re: Can I get the time "Duration" in "nsecs" acurracy? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli | On Friday, 9 July 2021 at 21:04:42 UTC, Ali Çehreli wrote:
> On 7/9/21 1:54 PM, Paul Backus wrote:
>> [...]
>
> Yes but the resolution seems not to be better than 100 nsecs. A quick research reveals a better resolution is not possible with common hardware on at least Linux.
>
> The following program always prints multiples of 100 on my Mint OS:
>
> import std.stdio;
> import core.thread;
> import std.datetime.stopwatch;
>
> void main() {
> auto sw = StopWatch();
> sw.start();
>
> foreach (_; 0..10) {
> Thread.sleep(0.nsecs);
> writefln("%,s", sw.peek.total!"nsecs");
> }
> }
>
> Ali
So it's an OS thing? C++ with "std::chrono" can show me less than 1 hnsec (100 nanoseconds) accuracy.
|
July 10, 2021 Re: Can I get the time "Duration" in "nsecs" acurracy? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer | On Saturday, 10 July 2021 at 01:11:28 UTC, Steven Schveighoffer wrote: >You can get better than hnsecs resolution with However, Note also that hnsecs is the base unit for Windows high precision clocks, though their epoch is year 1600 instead of year 0. Nice summary. hnsecs is a little weird but defensible given the range argument. Down the road we might add a nanosecond timeline abstraction based on TAI with zero set to 1972 (when UTC was aligned with TAI IIUC). Range issues could be addressed by animating the long dormant cent. Any precision issues could be handled with fixed point pairs. Doubles across the same timeline would work for casual applications. |
July 10, 2021 Re: Can I get the time "Duration" in "nsecs" acurracy? | ||||
---|---|---|---|---|
| ||||
Posted in reply to rempas | On 7/9/21 11:28 PM, rempas wrote: > So it's an OS thing? Don't listen to me on this. :) A quick search yesterday made me believe you need kernel support as well. Even if so, I would imagine modern kernel on modern hardware should work. Ali |