Hi gambit users

I am trying to verify that a program written in Gambit-C scheme is as fast as equivalent C program.

I tried to make a scheme version of the following C++ program which is;

#include <iostream>
#include <cmath>
#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <iomanip>  

using namespace std;

double f(double x);

int main(int argc, char* argv[]) {
  clock_t start;
  start = clock();
  double duration;
  double sum = 0;
  long n = atoi(argv[1]);
  double x;
  for(long i = 1; i <= n ;i++) {
    x = (i - 0.5) / n;
    sum += 4.0/(1.0+x*x);
  }
  sum /= n;
  cout << setprecision(17) << sum << endl << endl;

  duration = ( clock() - start ) / (double) CLOCKS_PER_SEC;
  cout << duration <<'\n';
  return 0;
}

double f(double x) {
  return 4.0/(1.0 + x*x);
}

and my best so far is
#!/usr/bin/env gsi-script
(declare
  (not safe)
  (mostly-flonum))
(define (main arg)
  (let ((k (string->number arg)))
    (pretty-print (time (cpi (exact->inexact k))))))
(define (cpi n)
  (letrec ((rec (lambda (i sum)
                  (let* ((x (fl/ (fl- i 0.5) n))
                         (summand (fl/ 4.0 (fl+ 1.0 (fl* x x)))))
                    (if (fl> i n)
                        (fl/ sum n)
                        (rec (fl+ i 1.0) (fl+ sum summand)))))))
    (rec 0.0 0.0)))

and the result is poor: 0.043s vs 0.145s
server@HP-Proliant-MicroServer:~/speedtest$ ls
pi.cpp  pi.scm
server@HP-Proliant-MicroServer:~/speedtest$ g++ -o pi-cpp pi.cpp
server@HP-Proliant-MicroServer:~/speedtest$ gsc -exe -o pi-scm pi.scm
server@HP-Proliant-MicroServer:~/speedtest$ time ./pi-cpp 1000000
3.1415926535897643

0.038903

real 0m0.043s
user 0m0.042s
sys 0m0.004s
server@HP-Proliant-MicroServer:~/speedtest$ time ./pi-scm 1000000
(time (cpi (exact->inexact k)))
    128 ms real time
    128 ms cpu time (127 user, 2 system)
    182 collections accounting for 67 ms real time (72 user, 1 system)
    224000448 bytes allocated
    341 minor faults
    no major faults
3.1415966535897644

real 0m0.145s
user 0m0.136s
sys 0m0.009s
server@HP-Proliant-MicroServer:~/speedtest$ 

So.. I guess my scheme version is not equivalent to the original C++ program,
but I'm having trouble figuring out why

any help will be appreciated

any comment, any suggestion..