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..