Portál AbcLinuxu, 10. května 2025 07:27

Dotaz: Může clock_getttime vrátit v tv_nsec víc než sekundu?

5.2.2016 23:37 Petr
Může clock_getttime vrátit v tv_nsec víc než sekundu?
Přečteno: 521×
Odpovědět | Admin
Může clock_gettime v některých případech vrátit ve struct timespec počet nanosekund (tv_nsec) větší než 1 miliardu (tj. v přepočtu více než 1 sekundu) a musím to tak kontrolovat a popř. dělit a přičítat do sekund, nebo se mohu spolehnout (zaručeno nějakým POSIX standardem), že tam nikdy nebude hodnota rovná či větší než hodnota odpovídající jedné sekundě?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

5.2.2016 23:44 Petr
Rozbalit Rozbalit vše Re: Může clock_getttime vrátit v tv_nsec víc než sekundu?
Odpovědět | | Sbalit | Link | Blokovat | Admin
A ještě, může tam být záporná hodnota? Pokud ano, jaký má význam, když už může být záporná hodnota ty sekundy, což by samo o sobě znamenalo čas před epochou daných hodin?
6.2.2016 00:41 Jardík
Rozbalit Rozbalit vše Re: Může clock_getttime vrátit v tv_nsec víc než sekundu?
Kdybys chvilku hledal, našel bys. struct timespec. struct timespec je mimo jiné také součastí standardu C11, kde je uvedeno, že tv_sec je vždy větší nebo rovno nule a tv_nsec v rozsahu nula až 999999999, tj. méně než sekunda. C11 tedy neumožňuje, aby byl aktuální čas nastaven před epochu daných hodin.
6.2.2016 16:17 Petr
Rozbalit Rozbalit vše Re: Může clock_getttime vrátit v tv_nsec víc než sekundu?
Pak nechápu, proč nepoužijí neznaménkový typ.
7.2.2016 23:20 tom
Rozbalit Rozbalit vše Re: Může clock_getttime vrátit v tv_nsec víc než sekundu?
Int je vyhodnejsi pro optimalizace, napriklad

for (int i = 1; i > 0; i += i) { ... }

prekladac muze zoptimalizovat na nekonecny cyklus.
8.2.2016 22:50 Sten
Rozbalit Rozbalit vše Re: Může clock_getttime vrátit v tv_nsec víc než sekundu?
Tohle je zrovna dost špatný příklad. Pro unsigned int to bude vždy nekonečný cyklus, protože dle standardu (ISO C i ISO C++) nemůže přetéct, pro signed int to pak bude podle záviset na nastavení kompilátoru s tím, že podle standardu je přetečení nedefinované chování.
9.2.2016 10:31 tom
Rozbalit Rozbalit vše Re: Může clock_getttime vrátit v tv_nsec víc než sekundu?
Ale prd, unsigned int prave podle ISO C i C++ pretect muze a proto se cyklus ukonci pote, co to pretece. Pro signed int je nekonecny cyklus korektnim vystupem kompilatoru, protoze podle ISO C i C++ v korektnim programu k preteceni znamenkoveho typu dojit nemuze. Nektere prekladace umoznuje toto chovani definovat nestandardnimi prepinaci.

Hezky to ilustruje, ze pouziti znamenkoveho typu umoznue prekladaci vice optimalizovat a proto dava smysl ho pouzit tam, kde neni nutne sahnout po bezznamenkovem typu.
8.2.2016 22:44 Sten
Rozbalit Rozbalit vše Re: Může clock_getttime vrátit v tv_nsec víc než sekundu?
Protože:
  1. je to jedno, když je rozsah takový, že to nemůže přetéct
  2. znaménkové typy jsou výchozí v C
9.2.2016 13:48 Jardík
Rozbalit Rozbalit vše Re: Může clock_getttime vrátit v tv_nsec víc než sekundu?
1. Aneb rok 2038, že?
9.2.2016 14:29 karkulka
Rozbalit Rozbalit vše Re: Může clock_getttime vrátit v tv_nsec víc než sekundu?
Pocet nanosekund v sekunde se v roce 2038 nejak dramaticky zvysi?

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.