The NTP filtering and selection algorithms act upon
a set of variables for clock offset theta ,THETA, roundtrip delay delta ,DELTA and dispersion epsilon , EPSILON. When necessary
to distinguish between them, lowercase Greek letters are used for variables relative to a peer, while uppercase Greek letters are
used for variables relative to the primary reference source(s), i.e., via the peer to the root of the synchronization subnet.
Subscripts will be used to identify the particular peer when this is not clear from context. The algorithms are based on a quantity
called the synchronization distance lambda ,LAMBDA, which is computed from the roundtrip delay and dispersion as described
below.
As described in Appendix H, the peer dispersion epsilon includes contributions due to
measurement error p=1<< sys.precision, skewerror accumulation phi tau, where phi = NTP.MAXSKEW over NTP.MAXAGE is the maximum
skew rate and tau = sys.clock  peer.update is the interval since the last update, and filter (sample) dispersion epsilon sub sigma
computed by the clockfilter algorithm. The root dispersion EPSILON includes contributions due to the selected peer dispersion epsilon
and skewerror accumulation phi tau, together with the root dispersion for the peer itself. The system dispersion includes the select
(sample) dispersion epsilon sub xi computed by the clockselect algorithm and the absolute initial clock offset  THETA  provided to
the localclock algorithm. Both epsilon and EPSILON are dynamic quantities, since they depend on the elapsed time tau since the last
update, as well as the sample dispersions calculated by the algorithms.
Each time the relevant peer variables are updated,
all dispersions associated with that peer are updated to reflect the skewerror accumulation. The computations can be summarized as
follows:
theta ==
peer.offset,
delta ==
peer.delay,
epsilon ==
peer.dispersion = rho + phi tau + epsilon sub sigma,
lambda == epsilon + 
delta  over 2,
where tau is the interval since the original
timestamp (from which theta and delta were determined) was transmitted to the present time and epsilon sub sigma is the filter
dispersion (see clockfilter procedure below). The variables relative to the root of the synchronization subnet via peer i are
determined as follows:
THETA sub i == theta sub
i ,
DELTA sub i ==
peer.rootdelay + delta sub i,
EPSILON sub i ==
peer.rootdispersion + epsilon sub i + phi tau sub i ,
LAMBDA sub i == EPSILON
sub i +  DELTA sub i  over 2 ,
where all variables are understood to pertain to the
ith peer. Finally, assuming the ith peer is selected for synchronization, the system variables are determined as follows:
THETA = combined final
offset ,
DELTA = DELTA sub
i,
EPSILON = EPSILON sub i +
epsilon sub xi +  THETA  ,
LAMBDA = LAMBDA sub i
,
where epsilon sub xi is the select dispersion (see
clockselection procedure below).
Informal pseudocode which accomplishes these
computations is presented below. Note that the pseudocode is represented in no particular language, although it has many similarities
to the C language. Specific details on the important algorithms are further illustrated in the Clanguage routines in
Appendix
I.
