(define (hsb->rgb h s b) (if (= s 0) (rgb b b b) (let* ((i (floor (* h 6))) (f (- (* h 6) i)) (p (* b (- 1 s))) (q (* b (- 1 (* s f)))) (t (* b (- 1 (* s (- 1 f)))))) (case (if (inexact? i) (inexact->exact i) i) ((0 6) (rgb b t p)) ((1) (rgb q b p)) ((2) (rgb p b t)) ((3) (rgb p q b)) ((4) (rgb t p b)) ((5) (rgb b p q)) (else (internal-bug hsb->rgb "is an illegal hsb remainder value" i))))))