1

我正在尝试计算如果我有面积为 4195065486 平方毫米且厚度为 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。

4

1 回答 1

3

returnif-branch 中缺少 a ,导致未定义的行为。
添加它:

return AreaCalc(r+1);

你应该得到一个编译器警告。
如果没有,请提高警告级别。
如果你这样做了,请开始注意警告。您的编译器的“将警告视为错误”选项是一个非常健康的选择。

(但是,就像@Henrik 在评论中建议的那样,数学是最好的解决方案。)

于 2013-10-30T08:35:46.643 回答