Portál AbcLinuxu, 14. května 2024 11:44


Dotaz: rozlišení gettimeofday()

9.12.2010 14:48 Jan Martinek | skóre: 43 | blog: johny | Brno
rozlišení gettimeofday()
Přečteno: 198×
Odpovědět | Admin
Nemáte prosím někdo vysvětlení pro následující pokus? Vložte někam do terminálu toto:
python << tohle_cele_musi_byt_oznaceno
import time
for i in xrange(100): print time.time() - time.time()
tohle_cele_musi_byt_oznaceno
Ten program vypíše časové intervaly v sekundách mezi po sobě jdoucími voláními time.time(), což jak doufám, odpovídá systémovému volání gettimeofday(). Nejčastější výsledek je nula, ale objeví se i dva jiné: -9.53674316406e-07 a -1.19209289551e-06. Je zajímavé, že jestliže vypočítám jejich podíl, vyjde

-1.19209289551e-06/-9.53674316406e-07 = 1.25

tedy pět čtvrtin. Obě čísla jsou tedy nejspíš celočíselnými násobky nějakého časového kvanta. To zjistím například tak, že to větší z nich vydělím pěti:

1.19209289551e-06/5=2.3841857910199999e-07

Kdybych chtěl vědět, kolik takových časových kvant za sekundu uplyne, tak hodnotu převrátím a dostanu

4194304

což je pro mně naprosto úžasný výsledek, protože to je celočíselná mocnina dvou, 222. Mám dva dotazy. Proč právě toto číslo a proč výše uvedený program v pythonu dává zrovna nula, čtyři anebo pět časových kvant.
Nástroje: Začni sledovat (3) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

rADOn avatar 9.12.2010 18:09 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: rozlišení gettimeofday()
Odpovědět | | Sbalit | Link | Blokovat | Admin
Myslim ze jsi prave slavnostne objevil omezeni presnosti floatu.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
9.12.2010 22:07 skeptik
Rozbalit Rozbalit vše Re: rozlišení gettimeofday()
Odpovědět | | Sbalit | Link | Blokovat | Admin
Z milionu pokusů mám cca 20 nenulových hodnot:
-0.0160000324249
-0.0149998664856
-0.0160000324249
-0.0160000324249
-0.0160000324249
-0.0160000324249
-0.0149998664856
-0.0150001049042
-0.0160000324249
-0.0149998664856
-0.0150001049042
-0.0160000324249
-0.0150001049042
-0.0159997940063
-0.0160000324249
-0.0160000324249
-0.0149998664856
-0.0150001049042
-0.0160000324249
-0.0149998664856
(Python 2.6 ve Windows 7) - předpokládám, že to souvisí s časovačem, nenulové hodnoty odpovídají situaci, kdy došlo k přepnutí kontextu mezi oběma voláními time().
10.12.2010 11:26 l4m4
Rozbalit Rozbalit vše Re: rozlišení gettimeofday()
Na MS Windows má time() asi houby přesnost. Na Linuxu opravdu měří mikrosekundy, a vzhledem k tomu, že time()/2^53 je cca 1.5e-7, tj. ani ne o řád méně, tak je vidět konečná přesnost IEEE double...

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.