Matematyka za Google leap second smear formula
Formuła wspomniana w poście rozmaz sekundy przestępnej Google : modulowanie "kłamstwa" przez okno czasowe w przed północą:
lie(t) = (1.0 - cos(pi * t / w)) / 2.0
Nie ma opisu matematyki, która za tym stoi. Czy ktoś może wyjaśnić, dlaczego formuła działa? Czy można to również wykorzystać w każdej sytuacji, w której chcemy zsynchronizować czas stopniowo przez okno i uniknąć nagłych skoków ?
2 answers
To działa, ponieważ Wykres cos(x)
zmienia się płynnie w czasie. Nie zmienia się nagle, choć zmienia się nieliniowo.
Powiedzmy, że rozmazujemy okno w = 86400
. Oto czym jest kłamstwo od t = 0
do t = 86400
:
t + lie(t)
) jest prawie identyczny z tym, jaki powinien być czas rzeczywisty (t
). Rozmazany czas, który zgłaszasz, również zmienia się bardzo powoli z czasem. Idealnie, dla każdej 1 prawdziwej sekundy, która mija, powinieneś zgłosić, że minęła 1 sekunda. W rozmazanym czasie to, co zamiast tego widzisz, to:
W środku dnia widzimy największe zmiany. Ale te zmiany są w kolejności 10^-5
. Są na tyle małe, że każdy, kto otrzyma rozmazany czas, nie będzie podejrzewał, że coś jest nie tak. W południe mówisz o różnicach mikrosekund w tym, o ile szybciej przesuwa się czas rozmazywania.
W W przypadku Google, chcą płynnie zmieniać czas bardzo powoli tak, że lokalne korekty nie występują. Jeśli nagle zmieniają czas o sekundę, mogą wystąpić lokalne korekty. A z postu na blogu wynika, że generalnie prowadzi to do bardzo złych rzeczy (tj. pęknięć rzeczy).
Jedną rzeczą do zauważenia jest to, że mogą nie rozmazywać sekundy przestępnej w ciągu dnia. Może to potrwać ponad rok. W takim przypadku zmiana jest jeszcze mniejsza. W tym przypadku, z dnia na dzień zmiany są w kolejności nanosekund.
Jeśli chcesz się dowiedzieć czegoś o matematyce ... ta część nie jest zbyt interesująca.cos(x)
jest ograniczone przez [-1, +1]. W x = 0
mamy cos(0) = 1
i w x = pi
, cos(pi) = -1
. Wartość t / w
zwiększa się liniowo z 0 do 1 z t = 0 ... w
. Więc cos(pi * t / w)
zmienia się z +1
W t = 0
w dół do -1
w t = w
. Reszta wynika z tego.
Okresowe cechy cos(x)
są w rzeczywistości dość ważne. Nie możemy po prostu użyć czegoś takiego jak lie(t) = t / w
. Gdyby tak było, kłamstwo zawsze będzie wzrastać w czasie. Sekundy przestępne będą się gromadzić w tempie 1 / w
na sekundę. cos(x)
ma tę właściwość, że oscyluje pomiędzy -1
a +1
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-01 07:07:09
Zgadnę.
Cos() wyświetla wartości z zakresu -1 do +1 tak więc maksymalne kłamstwo byłoby wtedy, gdy cos wynosi -1, ponieważ
(1.0 - -1)/2 == 1.0
I Min gdy cos jest +1
(1.0 - 1)/2 == 0.0
Zauważ, że 0.0 będzie odpowiednią wartością dla "no lie", a 1.0 będzie odpowiednią wartością dla "leap second".
Oto wykres funkcji, widać, że ma ładne i płynne stopniowe przejście od 0 do 1.
Jak dla wyrażenia użytego do obliczenia argumentu do cos: pi * t / w
, można je po prostu traktować jako zmianę prędkości / interwału, z jaką Funkcja Przechodzi z -1 do 1. Większe t sprawia, że przejście jest szybsze, a większe w sprawia, że przejście jest wolniejsze.
Wspomnieli, że w było oknem czasu, zanim oficjalna sekunda przestępna miała zostać zastosowana, więc zrób to w sekundach. Wtedy t może być jakąś rosnącą liczbą, prawdopodobnie sekund ponownie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-01 06:54:05