[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Apparent divide-by-zero bug in date->julian-day



John,

Thanks for the report -- I'll work on it as I have
time. Do you want to make the changes and write some
tests?

Will F

--- John Clements <clements@xxxxxxxxxxxxxxxx> wrote:
> 
> date->julian-day can result in a divide-by-zero
> error:
> 
> (require (lib "time.ss" "srfi" "19"))
> (date->julian-day (make-srfi:date 0 0 0 0 29 6 2004
> 0))
> 
> =>
> 
> /: Division by 0
> 
> 
> The problem appears to be in date->julian-day:
> 
> (define (date->julian-day date)
>    (let ( (nanosecond (date-nanosecond date))
> 	 (second (date-second date))
> 	 (minute (date-minute date))
> 	 (hour (date-hour date))
> 	 (day (date-day date))
> 	 (month (date-month date))
> 	 (year (date-year date))
> 	 (offset (date-zone-offset date)) )
>      (+ (tm:encode-julian-day-number day month year)
>         (- 1/2)
>         (+ (/ (/ (+ (* hour 60 60)
> 		   (* minute 60) second (/ nanosecond tm:nano))
> tm:sid)
> 	     (- offset))))))
> 
> 
> Note that there's a division by (- offset), which
> means that any call 
> to date->julian-day with a zero time-zone offset
> causes an error.  It 
> seems clear that the (- offset) should appear inside
> the 
> summation-of-seconds addition.
> 
> It also means that the result of date->julian day is
> _always_ going to 
> be wrong, which suggests that there's no test case
> for this function at 
> all.  Sure enough, a grep through the test suite for
> 'date->julian-day' 
> comes up empty.  Was this function added late?  Any
> thought of updating 
> the test suite?
> 
> john clements
> 
> 
>