Есть ли какое-либо усечение?

Я пытаюсь вычислить радиус шара, который можно сделать, если у меня есть кожа с площадью 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.

1

Решение

Вы скучаете по return в if-ответ, вызывающий неопределенное поведение.
Добавьте это:

return AreaCalc(r+1);

Вы должны были получить предупреждение компилятора за это.
Если вы этого не сделали, увеличьте уровень предупреждения.
Если вы сделали, начните обращать внимание на предупреждения. Опция «Обрабатывать предупреждения как ошибки» вашего компилятора — очень полезный выбор.

(Но, как подсказывает @Henrik в комментариях, математика — лучшее решение.)

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]