二重積分 C++

二重積分をシンプソン法でときます。
x*y をxが0から1、yを0から1で積分。

#include <iostream>
#include <cmath>
using namespace std;
/*
コンパイルできないときは上の3行を次の2行に置き換えてください。
#include <iostream.h>
#include <math.h>
*/
/* ↓↓↓↓nを大きくすると精度が上がる*/
const int n = 10;
const double pi = 3.141592;
double y;

/*積分する関数 f(x,y)*/
double f(double x,double y){
    return x*y;
}

/* 積分の範囲 x0からx_max  yy0からy_max*/
const double x0 = 0.0000001;
const double x_max = 1.0;
const double yy0 = 0.0000001;
const double y_max = 1.0;

/* x方向の積分 */
double simpson(double y){
    double delta = (x_max-x0)/n;
    double a;
    a = f(x0,y);
    a += f(x0+delta*n,y);
    int i;
    for(i=1;i<n;i+=2){
        a += 4.0*f(x0+delta*i,y);
    }
    for(i=2;i<n;i+=2){
        a += 2.0*f(x0+delta*i,y);
    }
    return a*delta/3.0;
}

/* y方向の積分 */
int main(){
    double delta=(y_max-yy0)/n;
    double a;
    a = simpson(yy0);
    a += simpson(yy0+delta*n);
    int i;
    for(i=1;i<n;i+=2){
        a += 4.0*simpson(yy0+delta*i);
    }
    for(i=2;i<n;i+=2){
        a += 2.0*simpson(yy0+delta*i);
    }
    cout << a*delta/3.0 << endl;
    return 0;
}

実行結果
0.25