有截断吗?

时间:2013-10-30 08:18:57

标签: c++ truncation

我试图计算一个球的半径,如果我的皮革面积为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。

1 个答案:

答案 0 :(得分:3)

您错过return - 分支中的if,导致未定义的行为 添加它:

return AreaCalc(r+1);

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

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