are handled in units of ppm, whereas the 'dfreq' argument is in
terms of the gradient of the (offset) v (local time) function. */
- current_freq_ppm = (1.0 - dfreq) * current_freq_ppm + 1.0e6 * dfreq;
+ current_freq_ppm += dfreq * (1.0e6 - current_freq_ppm);
/* Call the system-specific driver for setting the frequency */
current_freq_ppm = (*drv_set_freq)(current_freq_ppm);
/* Work out new absolute frequency. Note that absolute frequencies
are handled in units of ppm, whereas the 'dfreq' argument is in
terms of the gradient of the (offset) v (local time) function. */
- current_freq_ppm = (1.0 - dfreq) * old_freq_ppm + 1.0e6 * dfreq;
+ current_freq_ppm += dfreq * (1.0e6 - current_freq_ppm);
DEBUG_LOG(LOGF_Local, "old_freq=%.3fppm new_freq=%.3fppm offset=%.6fsec",
old_freq_ppm, current_freq_ppm, doffset);
if (coefs_valid) {
coef_seconds_fast += doffset;
- coef_gain_rate = (1.0 - dfreq) * coef_gain_rate + dfreq;
+ coef_gain_rate += dfreq * (1.0 - coef_gain_rate);
}
DEBUG_LOG(LOGF_RtcLinux, "dfreq=%.8f doffset=%.6f old_fast=%.6f old_rate=%.3f new_fast=%.6f new_rate=%.3f",