reference: separate calculation of root dispersion

This commit is contained in:
Miroslav Lichvar 2017-08-18 18:44:17 +02:00
parent d87db7cdb8
commit 33d65c8614

View file

@ -822,6 +822,19 @@ update_leap_status(NTP_Leap leap, time_t now, int reset)
/* ================================================== */ /* ================================================== */
static double
get_root_dispersion(struct timespec *ts)
{
if (UTI_IsZeroTimespec(&our_ref_time))
return 1.0;
return our_root_dispersion +
fabs(UTI_DiffTimespecsToDouble(ts, &our_ref_time)) *
(our_skew + fabs(our_residual_freq) + LCL_GetMaxClockError());
}
/* ================================================== */
static void static void
write_log(struct timespec *now, int combined_sources, double freq, write_log(struct timespec *now, int combined_sources, double freq,
double offset, double offset_sd, double uncorrected_offset) double offset, double offset_sd, double uncorrected_offset)
@ -1159,14 +1172,12 @@ REF_GetReferenceParams
double *root_dispersion double *root_dispersion
) )
{ {
double elapsed, dispersion; double dispersion;
assert(initialised); assert(initialised);
if (are_we_synchronised) { if (are_we_synchronised) {
elapsed = UTI_DiffTimespecsToDouble(local_time, &our_ref_time); dispersion = get_root_dispersion(local_time);
dispersion = our_root_dispersion +
(our_skew + fabs(our_residual_freq) + LCL_GetMaxClockError()) * elapsed;
} else { } else {
dispersion = 0.0; dispersion = 0.0;
} }