help me roundoff kenobi you're my only hope added by dsp on Sat Aug 6 19:57:29 2016


(define (number-of-digits-gen x acc mod func)
  (if (= mod 0)
      acc
      (number-of-digits-gen (func x 10) (+ acc 1) (remainder (floor (func x 10)) 10) func)))

(define (number-of-digits x)
  (cond ((= x 1) 1)
        ((< x 1) (number-of-digits-gen x 0 1 *))
        ((> x 1) (number-of-digits-gen x 0 1 /))))


;;works
#;109> (number-of-digits 0.131331)
7

;;lol roundoff errors
#;111> (number-of-digits 0.1313)
18

;;trace
;; Arguments to number-of-digits-gen: (13130000.0 8 9.0 #<procedure (numbers#* . args359)>)
;; Arguments to number-of-digits-gen: (131300000.0 9 9.0 #<procedure (numbers#* . args359)>)
;; Arguments to number-of-digits-gen: (1313000000.0 10 9.0 #<procedure (numbers#* . args359)>)
;; Arguments to number-of-digits-gen: (13130000000.0 11 9.0 #<procedure (numbers#* . args359)>)
;; Arguments to number-of-digits-gen: (131300000000.0 12 9.0 #<procedure (numbers#* . args359)>)
;; Arguments to number-of-digits-gen: (1313000000000.0 13 9.0 #<procedure (numbers#* . args359)>)
;; Arguments to number-of-digits-gen: (13130000000000.0 14 9.0 #<procedure (numbers#* . args359)>)
;; Arguments to number-of-digits-gen: (131300000000000.0 15 9.0 #<procedure (numbers#* . args359)>)
;; Arguments to number-of-digits-gen: (1.313e+15 16 9.0 #<procedure (numbers#* . args359)>)
;; Arguments to number-of-digits-gen: (13129999999999998.0 17 8.0 #<procedure (numbers#* . args359)>)
;; Arguments to number-of-digits-gen: (131299999999999984.0 18 0.0 #<procedure (numbers#* . args359)>)