/** * Computes the volume of a d-dimensional hypersphere of radius 1. */ void sphere_volume(Float &volume, int d) { Float rtmp1; volume = pow(M_PI, (double)(d / 2)); if (d % 2 == 0) for (int i = 1; i <= d / 2; i++) { rtmp1 = (double)i; volume.div(volume, rtmp1); } else for (int i = 0; i <= d / 2; i++) { rtmp1 = 2.0 / (double)(2 * i + 1); volume.mul(volume, rtmp1); } }