OK, data is good.

Here is what Gambit expands your code to, with some annotations:

heine:~/Downloads> gsc -c -expansion conversion.scm
Expansion:

(define noop (lambda () #!void))

The following implies that gsc could expand (floor n) better as:

(cond ((fixnum? n) n)
      ((and ('#<procedure #2 ##flonum?> n) ('#<procedure #3 ##flfinite?> n)) ('#<procedure #4 ##flfloor> n))
      (else ('#<procedure #5 floor> n))))

and it could expand inexact->exact better (after defining flfixnum?) as

(cond ((fixnum? n) n)
      ((and (flonum? n) (flinteger? n) (flfixnum? n)) (flonum->fixnum n))
      (else (<inexact->exact> n))

(define ->integer
  (lambda (n)
    (lambda ()
      (let ((temp.5 (if (and ('#<procedure #2 ##flonum?> n) ('#<procedure #3 ##flfinite?> n))
                        ('#<procedure #4 ##flfloor> n)
                        ('#<procedure #5 floor> n))))
        (if ('#<procedure #6 ##fixnum?> temp.5) temp.5 ('#<procedure #7 inexact->exact> temp.5))))))

(define ->flonum
  (lambda (n)
    (lambda ()
      (if ('#<procedure #6 ##fixnum?> n)
          ('#<procedure #8 ##fl<-fx> n)
          (if ('#<procedure #2 ##flonum?> n) n ('#<procedure #9 exact->inexact> n))))))

This following machinery seems pretty heavy.  I'd suggest

(define (test t #!optional (seconds 1.))
  (let loop ((n 1))
    (let ((start-time (cpu-time)))
      (do ((i 0 (fx+ i 1)))
      ((fx= i n))
    (t))
      (let ((end-time (cpu-time)))
    (if (<= seconds (fl- end-time start-time))
        (pp (/ n (fl- end-time start-time)))
        (loop (fx* n 2)))))))

(define test
  (lambda (t #!optional (seconds 5))
    (let ((at ('#<procedure #10 ##box> 0)))
      (let ((th (thread-start!
                 (make-thread
                  (lambda ()
                    (letrec ((loop (lambda (t at)
                                     (let ((begin-temp.1 (t)))
                                       (let ((begin-temp.0
                                              ('#<procedure #11 ##set-box!>
                                               at
                                               (let ((temp.7 ('#<procedure #12 ##unbox> at)))
                                                 (if ('#<procedure #6 ##fixnum?> temp.7)
                                                     (let ((temp.9 ('#<procedure #13 ##fx+?> temp.7 1)))
                                                       (if temp.9 temp.9 ('#<procedure #14 fx+> temp.7 1)))
                                                     ('#<procedure #14 fx+> temp.7 1))))))
                                         (loop t at))))))
                      (loop t at)))))))
        (let ((begin-temp.3 (thread-sleep! seconds)))
          (let ((r ('#<procedure #12 ##unbox> at)))
            (let ((begin-temp.2 (thread-terminate! th)))
              (let ((temp.12 (if (and ('#<procedure #2 ##flonum?> seconds) ('#<procedure #2 ##flonum?> r))
                                 ('#<procedure #15 ##fl/> r seconds)
                                 ('#<procedure #16 /> r seconds))))
                (if ('#<procedure #6 ##fixnum?> temp.12)
                    ('#<procedure #8 ##fl<-fx> temp.12)
                    (if ('#<procedure #2 ##flonum?> temp.12) temp.12 ('#<procedure #9 exact->inexact> temp.12)))))))))))

With that, my rates are (first for void, then the four ->integer, then the four ->flonum):

76082403.02475469

18077766.69130593
2113932.395354323
12632656.242117403
1560283.434666285

34377410.006859235
69323006.15509051
1230645.7282318561
69180045.37858963

And, with (declare (not safe)) I get

105510445.88390666

18807367.927219782
2444080.701261633
13230418.609566122
1569627.036643679

47124065.98183112
92942772.26488659
1327228.230636181
92942772.26488681