(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 #) ;; Arguments to number-of-digits-gen: (131300000.0 9 9.0 #) ;; Arguments to number-of-digits-gen: (1313000000.0 10 9.0 #) ;; Arguments to number-of-digits-gen: (13130000000.0 11 9.0 #) ;; Arguments to number-of-digits-gen: (131300000000.0 12 9.0 #) ;; Arguments to number-of-digits-gen: (1313000000000.0 13 9.0 #) ;; Arguments to number-of-digits-gen: (13130000000000.0 14 9.0 #) ;; Arguments to number-of-digits-gen: (131300000000000.0 15 9.0 #) ;; Arguments to number-of-digits-gen: (1.313e+15 16 9.0 #) ;; Arguments to number-of-digits-gen: (13129999999999998.0 17 8.0 #) ;; Arguments to number-of-digits-gen: (131299999999999984.0 18 0.0 #)