23

谷歌的 Leap Second Smear Techinque帖子中提到的公式:在午夜之前的时间窗口 w 内调制“谎言”:

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

这背后的数学没有描述。有人可以解释为什么该公式有效。这也可以用于我们想要在窗口上逐渐同步时间并避免突然跳跃的任何情况吗?

4

2 回答 2

42

这是有效的,因为图表cos(x)随着时间的推移平滑变化。它不会突然变化,尽管它确实是非线性变化的。

假设我们在w = 86400. 以下是谎言从t = 0to的内容t = 86400

谎言图(t)

在一天的开始,我们所说的谎言非常小。您报告的时间 ( t + lie(t)) 几乎与实际时间 ( t) 相同。随着时间的推移,您报告的拖尾时间也发生了非常缓慢的变化。理想情况下,每经过 1 秒,您应该报告 1 秒已经过去。在涂抹时间,您看到的是:

涂抹时间的变化

到了中午,我们看到了最大的变化。但这些变化的顺序是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)+1at t = 0down 变为-1at t = w。其余的由此而来。

的周期性质cos(x)实际上是相当重要的。我们不能只选择使用类似lie(t) = t / w. 如果我们这样做了,谎言总是会随着时间的推移而增加。1 / w闰秒将继续以每秒的速度堆积。具有在和cos(x)之间振荡的性质。-1+1

于 2012-07-01T06:53:21.427 回答
2

我有点猜

cos() 输出 -1 到 +1 范围内的值,因此,最大谎言将是当 cos 为 -1 时,因为

(1.0 - -1)/2 == 1.0

和 cos 为 +1 时的最小值

(1.0 - 1)/2 == 0.0

请注意,0.0 将是“不说谎”的合适值,而 1.0 将是“闰秒”的合适值。

这是函数的图,你可以看到它从 0 到 1 有一个漂亮而平滑的渐变。

在此处输入图像描述

至于用于计算 cos: 参数的表达式pi * t / w,它们可以被认为是改变函数从 -1 转换到 1 的速度/间隔。使 t 变大使其转换更快,使 w 变大使其变大过渡较慢。

他们提到 w 是应用正式闰秒之前的时间窗口,所以以秒为单位。然后 t 可能是一些增加的数字,可能又是几秒钟。

于 2012-07-01T06:54:05.627 回答