Подтвердить что ты не робот

Математика позади Google leap вторая формула мазка

Формула, упомянутая в post Google Leap Second Smear Techinque: Модуляция "ложь" над временным окном w до полуночи:

lie(t) = (1.0 - cos(pi * t / w)) / 2.0 

В этом нет описания математики. Может кто-нибудь объяснить, почему работает эта формула. Также это можно использовать для любой ситуации, когда мы хотим постепенно синхронизировать время по окну и избегать скачков?

4b9b3361

Ответ 1

Это работает, потому что график cos(x) меняется со временем. Он не изменяется резко, хотя он меняет нелинейность.

Скажем, мы размываем окно w = 86400. Здесь то, что ложь от t = 0 до t = 86400:

Graph of lie(t)

В начале дня ложь, которую мы говорим, очень мала. Время, о котором вы сообщаете (t + lie(t)), почти идентично тому, что должно быть в реальном времени (t). Смутное время, о котором вы сообщаете, также со временем меняется очень медленно. В идеале, за каждую 1 реальную секунду, которая пройдет, вы должны сообщить, что прошло 1 секунда. В размазанное время вы видите следующее:

Change in smeared time

К середине дня мы видим самые большие изменения. Но эти изменения имеют порядок 10^-5. Они достаточно малы, чтобы любой, кто получал размазанное время, не подозревал, что что-то не так. В полдень вы говорите о различиях в микросекундах в том, насколько быстрее происходит время смазывания.

В случае Google они хотят медленно менять время очень медленно, чтобы локальные исправления не возникали. Если они внезапно меняют время на секунду, тогда могут произойти локальные исправления. И из сообщения в блоге это звучит так, как правило, приводит к очень плохим вещам (т.е. Разрыву материала).

Следует отметить, что они не могут размазать второй прыжок за день. Это может быть полный год. В этом случае изменение еще меньше. В этом случае ежедневные изменения имеют порядок наносекунд.

Если вы хотите узнать о фактической математике - эта часть не очень интересна. cos(x) ограничено [-1, +1]. При x = 0 имеем cos(0) = 1 и при x = pi, cos(pi) = -1. Величина t / w линейно возрастает от 0 до 1 от t = 0 ... w. Таким образом, cos(pi * t / w) изменяется от +1 на t = 0 до -1 на t = w. Остальное следует из этого.

Периодические качества cos(x) на самом деле весьма важны. Мы не можем просто использовать что-то вроде lie(t) = t / w. Если бы мы это сделали, ложь всегда увеличивалась бы с течением времени. Скользящие секунды просто продолжали накапливаться со скоростью 1 / w в секунду. cos(x) обладает тем свойством, что он колеблется между -1 и +1.

Ответ 2

Я догадуюсь.

cos() выводит значения в диапазоне от -1 до +1 поэтому максимальная ложь будет равна cos -1, так как

(1.0 - -1)/2 == 1.0

и min, когда cos равно +1

(1.0 - 1)/2 == 0.0

Обратите внимание, что 0.0 будет подходящим значением для "no lie", а 1.0 будет подходящим значением для "секунды прыжка".

heres график функции, вы можете видеть, что он имеет приятный и плавный переход от 0 до 1.

enter image description here

как для выражения, используемого для вычисления аргумента для cos: pi * t / w, их можно просто рассматривать как изменение скорости/интервала, в котором функция переходит от -1 к 1. Увеличение t делает переход быстрее, и сделать w больше делает переход медленнее.

Они упоминали, что w - это окно времени до того, как будет применен цифровой скачок, так что сделайте это за секунды. Тогда t может быть несколько увеличивающимся числом, вероятно, секундными секундами.