Hay
I have a very easy question but I can't find my typo...
I want to calculate the mass of a globe. I have two methods and I need both and they should give the same result of course...
first method:
M(r) = int^r_0 4*pi*rho(r) dr
rho(r) is the density profile of the globe, we can set it to 1 for a constant profile (for simplicity).
second method:
I divide the globe into shells multiply each shell with rho and sum over it
the numerical implementations would be:
first method:
Code:
double getmass(double r){
double mass = 0;
double radius;
int max = 10000000;
double step = r/max;
if(r == 0) return 0;
for(int i = 0; i <= max; i++){
radius = 0.0000001+i*step;
mass += 4.*pi*1.*pow(radius,2)*step; // rho is set to 1.
}
return mass;
}
second method
Code:
double getmass2(double r){
double mass = 0;
double radius, volume_new, volume_old;
int max = 100000000;
double step = r/max;
if(r == 0) return 0;
volume_old = 0.;
for(int i = 1; i <= max; i++){
radius = i*step;
volume_new = (4/3)*pi*pow(radius,3); // calculate the new volume
mass += (volume_new-volume_old)*1.; // density profile is set to 1
volume_old = volume_new; // this will be the old volume in the next round
}
return mass;
}
the problem is that both methods give not the same result. The equations are identical, I am sure that it is not a numerical result so it is probably a wrong implementation.
(A small program is attached which runs the methods explained above)
I am thankful for any help
best regards
florian
I found the problem... it is 4./3. not 4/3.. so stupid