-4

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

范围 = (-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;
}
4

3 回答 3

3

什么时候x-3,或者一般来说是负数,你试图计算sqrt(3*(pow(x,3))哪个是负数的平方根。这就是为什么你会得到奇怪的结果。使用pow计算整数幂的效率不是很高。但对于小程序,这可能无关紧要。

附录:正如 Nawaz 在评论中指出的那样,请务必在循环中每次重新评估 y,否则您只会得到初始 x 的 y。

于 2013-01-25T08:11:26.723 回答
2

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

正如@simonc 评论的那样——整个方程需要为每个重新计算x

于 2013-01-25T08:12:41.933 回答
0

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

于 2013-01-25T08:14:57.563 回答