diff options
| author | Gerd Moellmann <gerd@gnu.org> | 2001-10-05 09:26:53 +0000 |
|---|---|---|
| committer | Gerd Moellmann <gerd@gnu.org> | 2001-10-05 09:26:53 +0000 |
| commit | e5da45fda7e205a900dfa62236afa239bfcb534a (patch) | |
| tree | a9a0af4a345b44caf65a72e2854f3af79b7038b0 /lisp | |
| parent | 08b1f8a12ee617698dccf25f9c1dd9d0e2c32e97 (diff) | |
| download | emacs-e5da45fda7e205a900dfa62236afa239bfcb534a.tar.gz | |
(timer-relative-time): Fix computation for negative `micro'.
Diffstat (limited to 'lisp')
| -rw-r--r-- | lisp/timer.el | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/lisp/timer.el b/lisp/timer.el index 3820b57365e..0c159c6023d 100644 --- a/lisp/timer.el +++ b/lisp/timer.el @@ -116,9 +116,11 @@ SECS may be a fraction." (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)))) |
