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 ?

Author: Badri, 2012-07-01

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:

Wykres kłamstwa (t)

/ Align = "left" / Czas raportowania (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:

Zmiana czasu rozmazywania

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.

 40
Author: Mike Bailey,
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.

Tutaj wpisz opis obrazka

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.

 2
Author: goat,
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