是否有任何截断

Is there any truncation?

本文关键字:任何截 是否      更新时间:2023-10-16

我正在尝试计算如果我有面积为 4195065486 mm2 和厚度为 1 mm 的皮革,则可以制造的球的半径,从一个半径 = 1 mm 的小球开始,制造商可以将皮革包裹成球周围的多层。我写了这段代码来获取可以制作的球的半径以及皮革将保留的区域。(假设 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。

您在if -分支中缺少一个return,导致未定义的行为。
添加它:

return AreaCalc(r+1);

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

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