无法在C ++中评估公式

时间:2013-01-25 08:05:42

标签: c++

我无法通过公式让这个程序评估一系列值。

  

范围=( - 3.0.4.0)公式=(9(x ^ 3)-27(x ^ 2)-4x + 12)/(sqrt(3(x ^ 2)+1)   + abs(5-(x ^ 4)))

该程序打印出y as -1.IND

任何有助于阐明为什么所有y都以-1.IND出现的任何帮助都表示赞赏。

谢谢,戴夫

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

int main() {
    cout << "This program outputs formula results\n";
    long double x = -3.0;
    long double y = 1.0;
    long double a = (9*(pow(x,3))-27*(pow(x,2))-4*x+12);
    long double b = (sqrt(3*(pow(x,2))+1) + abs(5-(pow(x,4))));
    y = a/b;

        for(;x <4.5; x=x+.5){
            cout << "X = " << x << ", " << "Y = " << y;
        if(y==0)
            cout << "Y IS ZERO" << endl;
        else if(y<0)
            cout << "Y IS NEGATIVE" << endl;
        else if(y>0)
            cout << "Y IS POSITIVE\n" << endl;
        }
    return 0;
}

3 个答案:

答案 0 :(得分:3)

x-3时,或者一般为负数时,您正在尝试计算sqrt(3*(pow(x,3)),它是负数的平方根。这就是为什么你得到奇怪的结果。使用pow对计算整数幂并不是非常有效。但对于小型节目而言,这可能无关紧要。

附录:正如Nawaz在评论中指出的那样,请每次在循环中重新评估y,否则你只能获得y的初始值。

答案 1 :(得分:2)

您需要在循环中计算y,而不只是一次。

正如@simonc评论的那样 - 需要为每个x

重新计算整个等式

答案 2 :(得分:0)

您只计算x = -3的公式,对于该值,您试图得到负数的平方根。在循环内移动y的计算。