]> git.eshelyaron.com Git - emacs.git/commit
Fix time-add rounding bug
authorPaul Eggert <eggert@cs.ucla.edu>
Fri, 16 Aug 2019 23:25:02 +0000 (16:25 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Fri, 16 Aug 2019 23:27:27 +0000 (16:27 -0700)
commitf9fd12a30b3d94eb48f7b309907d136d7b2682ac
treed00aa93beec6eb1013127ee251342f39f135a994
parente82923c817159c751aa9c902093a46b9457e8499
Fix time-add rounding bug

Without this fix, time arithmetic yielded results that were not
mathematically accurate, even though the exact results were
representable; for example, (time-add 0 1e-13) yielded a timestamp
equal to 0 instead of to 1e-13.
* lisp/timezone.el (timezone-time-from-absolute):
Let time-add do its thing rather than using floating point
internally, which has rounding errors.  We now have bignums and so
don’t need floating point to avoid overflow issues.
* src/timefns.c (timeform_sub_ps_p): New function.
(time_arith): If either argument is a float, represent the
result exactly instead of discarding sub-ps info.
* test/lisp/timezone-tests.el (timezone-tests-time-from-absolute):
Don’t assume (HI LO US PS) timestamp format.
* test/src/emacs-module-tests.el (mod-test-add-nanosecond/valid):
Don’t assume that time-add discards sub-ns info.
* test/src/timefns-tests.el (time-rounding-tests):
Add regression test to detect time-add rounding bug.
lisp/timezone.el
src/timefns.c
test/lisp/timezone-tests.el
test/src/emacs-module-tests.el
test/src/timefns-tests.el