Math 谷歌闰秒涂抹公式背后的数学

Math 谷歌闰秒涂抹公式背后的数学,math,synchronization,timestamp,Math,Synchronization,Timestamp,post中提到的公式:在午夜前在时间窗口w上调制“谎言”: lie(t) = (1.0 - cos(pi * t / w)) / 2.0 没有关于这背后的数学描述。有人能解释为什么这个公式有效吗。这也可以用于我们希望在窗口上逐渐同步时间并避免突然跳跃的任何情况吗 之所以这样做,是因为cos(x)的图形随时间变化平稳。它不会突然改变,尽管它是非线性变化的 假设我们在一个w=86400的窗口上涂抹。下面是从t=0到t=86400的谎言: 在一天开始的时候,我们撒的谎很小。您报告的时间(t+li

post中提到的公式:在午夜前在时间窗口w上调制“谎言”:

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

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

之所以这样做,是因为
cos(x)
的图形随时间变化平稳。它不会突然改变,尽管它是非线性变化的

假设我们在一个
w=86400
的窗口上涂抹。下面是从
t=0
t=86400
的谎言:

在一天开始的时候,我们撒的谎很小。您报告的时间(
t+lie(t)
)几乎与实际时间相同(
t
)。随着时间的推移,您报告的被涂抹时间也在缓慢变化。理想情况下,每过1秒,您应该报告已过1秒。在污浊的时间里,你看到的是:

到了中午,我们看到了最大的变化。但这些变化的顺序是
10^-5
。它们足够小,任何人都不会怀疑有什么不对劲。在中午,你们谈论的是微秒的差异,即涂抹时间的移动速度有多快

在谷歌的例子中,他们希望非常缓慢地平稳地改变时间,这样就不会发生局部修正。如果它们突然改变时间一秒钟,则可能发生局部修正。从博文中可以看出,这通常会导致非常糟糕的事情发生(比如,东西坏了)

需要注意的一点是,他们可能不会在一天内抹掉闰秒。可能要一整年。在这种情况下,变化甚至更小。在这种情况下,每天的变化大约为纳秒

如果你想知道实际的数学,那部分不是很有趣
cos(x)
以[-1,+1]为界。在
x=0
我们有
cos(0)=1
x=pi
cos(pi)=-1
。值
t/w
t=0线性增加到1。。。w
。因此
cos(pi*t/w)
t=0时的
+1
变为
t=w时的
-1
。剩下的就是这个

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

我猜一下

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可能是一个不断增加的数字,很可能又是几秒钟。

多么愚蠢的解决方案!我很好奇,为什么谷歌没有像大多数人那样对时间非常关心,使用没有闰秒的时间方案,比如TAI或GPS时间。我不同意最后一部分关于使用线性校正的说法。虽然它不是那么平滑,而且确实可能会引起问题,但谎言不会永远增加,因为系统会在时间结束后以恒定的输出取代谎言。这同样适用于
cos
,一旦闰秒过去,谎言就变成了零。