From: Glenn Morris Date: Wed, 20 Apr 2011 02:09:06 +0000 (-0700) Subject: solar.el fixes. X-Git-Tag: emacs-pretest-24.0.90~104^2~275^2~239^2~1 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=f195c582d8e568fac9a161c6c4fc96de87a30ea7;p=emacs.git solar.el fixes. * lisp/calendar/solar.el (solar-horizontal-coordinates): Use the longitude argument rather than `calendar-longitude' (15yr old bug). (solar-date-next-longitude): Remove unused locals. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 66f854da5e3..867d7f9aa23 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2011-04-20 Glenn Morris + + * calendar/solar.el (solar-horizontal-coordinates): + Use the longitude argument rather than `calendar-longitude'. + (solar-date-next-longitude): Remove unused locals. + 2011-04-19 Stefan Monnier * progmodes/octave-mod.el (octave-in-comment-p, octave-in-string-p) diff --git a/lisp/calendar/solar.el b/lisp/calendar/solar.el index 31aed0484d7..84a1544d709 100644 --- a/lisp/calendar/solar.el +++ b/lisp/calendar/solar.el @@ -453,7 +453,7 @@ height (between -180 and 180) are both in degrees." (st (+ solar-sidereal-time-greenwich-midnight (* ut 1.00273790935))) ;; Hour angle (in degrees). - (ah (- (* st 15) (* 15 (car ec)) (* -1 (calendar-longitude)))) + (ah (- (* st 15) (* 15 (car ec)) (* -1 longitude))) (de (cadr ec)) (azimuth (solar-atn2 (- (* (solar-cosine-degrees ah) (solar-sin-degrees latitude)) @@ -771,26 +771,22 @@ day numbers. The values of `calendar-daylight-savings-starts', `calendar-daylight-savings-starts-time', `calendar-daylight-savings-ends', `calendar-daylight-savings-ends-time', `calendar-daylight-time-offset', and `calendar-time-zone' are used to interpret local time." - (let* ((long) - (start d) - (start-long (solar-longitude d)) - (next (mod (* l (1+ (floor (/ start-long l)))) 360)) - (end (+ d (* (/ l 360.0) 400))) - (end-long (solar-longitude end))) - (while ; bisection search for nearest minute - (< 0.00001 (- end start)) - ;; start <= d < end + (let ((start d) + (next (mod (* l (1+ (floor (/ (solar-longitude d) l)))) 360)) + (end (+ d (* (/ l 360.0) 400))) + long) + ;; Bisection search for nearest minute. + (while (< 0.00001 (- end start)) + ;; start <= d < end ;; start-long <= next < end-long when next != 0 - ;; when next = 0, we look for the discontinuity (start-long is near 360 - ;; and end-long is small (less than l). + ;; when next = 0, look for the discontinuity (start-long is near 360 + ;; and end-long is small (less than l)). (setq d (/ (+ start end) 2.0) long (solar-longitude d)) (if (or (and (not (zerop next)) (< long next)) (and (zerop next) (< l long))) - (setq start d - start-long long) - (setq end d - end-long long))) + (setq start d) + (setq end d))) (/ (+ start end) 2.0))) ;; FIXME but there already is solar-sunrise-sunset.