Я пытаюсь вычислить радиус шара, который можно сделать, если у меня есть кожа с площадью 4195065486 мм2 и толщиной 1 мм, начиная с небольшого шарика с радиусом = 1 мм, который производитель может обернуть кожей как многослойный вокруг шара. Я написал этот код, чтобы получить радиус шара, который можно сделать, и площадь, которая останется от кожи. (при условии, что pi = 3,14159).
double A, r;
const double pi=3.14159;
double AreaCalc(double r);
int main(){
A=4195065486.0;
r=1.0;
double final_r = AreaCalc(r);
cout<<final_r<<" "<<A<<" "<<endl;
return 0;
}
double AreaCalc(double r){
double ca;
ca=4*pi*r*r;
if (A-ca>=0.0){
A=A-ca;
AreaCalc(r+1);
}
else return r;
}
Есть ли какое-либо усечение или влияние, которое может привести к неточным результатам A
?
Отладкой я могу получить A = 12559904.940002432.
Вы скучаете по return
в if
-ответ, вызывающий неопределенное поведение.
Добавьте это:
return AreaCalc(r+1);
Вы должны были получить предупреждение компилятора за это.
Если вы этого не сделали, увеличьте уровень предупреждения.
Если вы сделали, начните обращать внимание на предупреждения. Опция «Обрабатывать предупреждения как ошибки» вашего компилятора — очень полезный выбор.
(Но, как подсказывает @Henrik в комментариях, математика — лучшее решение.)
Других решений пока нет …