;;;; srfi-19-common.scm ;; -- Miscellaneous Constants. (define-constant NS/MS 1000000) (define-constant NS/MuS 1000) (define-constant MS/S 1000) (define-constant MuS/S 1000000) (define-constant NS/S 1000000000) (define-constant -NS/S -1000000000) (define-constant SEC/DY 86400) ; seconds in a day (define-constant SEC/DY/2 43200) ; seconds in a half day (define-constant SEC/HR 3600) (define-constant SEC/MIN 60) #;(define-constant iNS/S 1000000000.0) #;(define-constant iSEC/DY 86400.0) #;(define-constant iONE-HALF 0.5) (define-constant HR/DY 24) (define-constant DY/WK 7) (define-constant DY/MN 31) ;maximum days per month (define-constant DY/YR 365) ;normal days per year (define-constant MN/YR 12) ;months per year ;; (define-inline (->boolean obj) (and obj #t)) (define-inline (fxabs x) (if (fx< x 0) (fxneg x) x)) ;; For storage savings since some aritmetic routines do not ;; return fixnums when possible. ;; ##sys#integer? ;; returns #t for integer fixnum or flonum ;; *double->number ;; returns a fixnum for the flonum x iff x isa integer in fixnum-range ;; otherwise the flonum x ;; When domain is integer and range is fixnum ;; Number MUST be a fixnum or flonum (define-inline (*double->number n) (##core#inline "C_double_to_number" n) ) (define-inline (gennum->fixnum x) (if (fixnum? x) x (*double->number x)) ) ;; When domain is integer and range is flonum-integer ;; Conversion attemped only when number is a fixnum or flonum-integer ;; Others returned (define-inline (genint->fixnum x) (if (##sys#integer? x) (gennum->fixnum x) x) )