为什么我的代码会产生nan的输出?

时间:2019-10-25 10:56:01

标签: c++

我的代码产生了nan的输出。

我环顾四周,我想这是因为从我收集的数据来看方程很复杂C ++不能很好地接收复杂的方程。

但这似乎不正确。

这是我的代码:

#include <iostream>
#include <cmath>
using namespace std;

int main ()
{

    int Backfill;
    double SlopeAngleOfWall, AngleOfInternalFriction, AngleOfFrictionSoilAndWall, BackfillSlope, CoefficientOfActivePressure;

    cout << "Retaining Wall Calculator \n";


    cout << "Enter the slope angle of the wall, this is measured from the horizontal plane, therefor will be 90 degrees if the retaining wall is vertical \n";
    cin >> SlopeAngleOfWall;
    cout << "Enter the angle of internal friction \n";
    cin >> AngleOfInternalFriction;
    cout << "Enter the angle of friction between the soil and the wall \n";
    cin >> AngleOfFrictionSoilAndWall;
    cout << "Enter the angle of the backfill slope \n";
    cin >> BackfillSlope;


    /* To make sin function work is is typed (angle*pi/180) */
    /* To make sin square work is is typesd (pow(sin (angle*pi/180), 2.0) */
    /* To add a square root sqrt is used */

    CoefficientOfActivePressure = (pow (sin ((SlopeAngleOfWall + AngleOfInternalFriction)*pi/180), 2.0))   /    ((pow (sin (SlopeAngleOfWall*pi/180), 2.0) * sin ((SlopeAngleOfWall * AngleOfFrictionSoilAndWall) * pi / 180)) *( 1 + sqrt( ( sin ((AngleOfInternalFriction + AngleOfFrictionSoilAndWall) * pi / 180) * sin ( (AngleOfInternalFriction - BackfillSlope) * pi / 180) / sin (  (SlopeAngleOfWall - AngleOfFrictionSoilAndWall) * pi / 180 ) * sin ( (SlopeAngleOfWall + BackfillSlope) * pi / 180)))));

    cout << "The coefficient of active pressure acting on the wall is" << CoefficientOfActivePressure <<"\n"
}

1 个答案:

答案 0 :(得分:2)

您似乎正在尝试实施Couloumbs的侧向土压力理论。公式如下:

Equation

(来自http://www.soilmanagementindia.com

假设您的实现正确,那么获得NaN作为结果的唯一方法是平方根参数是否为负。

最重要的是,该方程式不适用于所有可能的输入组合,并且对于错误的输入集,预期输出NaN