# HG changeset patch # User Gerd Moellmann # Date 1002274013 0 # Node ID 88e97e81d728d8bbd5f6915df2786944ff3fa1d5 # Parent fb85410efef79b67aa92bef2f8d388746c00a308 (timer-relative-time): Fix computation for negative `micro'. diff -r fb85410efef7 -r 88e97e81d728 lisp/timer.el --- a/lisp/timer.el Fri Oct 05 09:26:17 2001 +0000 +++ b/lisp/timer.el Fri Oct 05 09:26:53 2001 +0000 @@ -116,9 +116,11 @@ (setq low (+ low (floor secs))) ;; Normalize - (setq low (+ low (/ micro 1000000))) + ;; `/' rounds towards zero while `mod' returns a positive number, + ;; so we can't rely on (= a (+ (* 100 (/ a 100)) (mod a 100))). + (setq low (+ low (/ micro 1000000) (if (< micro 0) -1 0))) (setq micro (mod micro 1000000)) - (setq high (+ high (/ low 65536))) + (setq high (+ high (/ low 65536) (if (< low 0) -1 0))) (setq low (logand low 65535)) (list high low (and (/= micro 0) micro))))