summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGerd Moellmann <gerd@gnu.org>2001-10-05 09:26:53 +0000
committerGerd Moellmann <gerd@gnu.org>2001-10-05 09:26:53 +0000
commite5da45fda7e205a900dfa62236afa239bfcb534a (patch)
treea9a0af4a345b44caf65a72e2854f3af79b7038b0
parent08b1f8a12ee617698dccf25f9c1dd9d0e2c32e97 (diff)
downloademacs-e5da45fda7e205a900dfa62236afa239bfcb534a.tar.gz
emacs-e5da45fda7e205a900dfa62236afa239bfcb534a.tar.bz2
emacs-e5da45fda7e205a900dfa62236afa239bfcb534a.zip
(timer-relative-time): Fix computation for negative `micro'.
-rw-r--r--lisp/timer.el6
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))))