Abs函数在c ++中不能给出正确的答案吗?

时间:2019-01-11 19:08:17

标签: c++

我正在研究一种用于消除高斯的完整枢轴方法。唯一的问题是使用abs()函数。

在代码中,abs函数没有第二次给出正确的值。它给出4.4时应该给出-38。

如果有人知道,请告诉我错误。详细信息:在第一个循环i中找到最大值,然后将整个行除以该值,然后从所有行中删除该行。

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

    int main()
    {
        cout.precision(3);


        float a[4][5]={{4,-4,-3,7,1.3},{8,-3,-8,17,6.6,},{12,-12,-16,29,-2.1},{-8,33,-25,36,10.4}},temp[5];
        float max=0;
        int c,cl,no=4;

    for(int ku=no;ku>=0;ku--)
    {
    for(int r=0;r<ku;r++)
    {
            for(int i=0;i<ku;i++)
        {
            for(int j=0;j<4;j++)
            {
                if(abs(a[i][j])>max)
                {
                    max=a[i][j];
                    c=i;
                    cl=j;
                }
            }
        }
        cout<<"****max:"<<max<<"*****"<<endl;
            for(int k=0;k<5;k++)
            {
                if(r==c)
                {
                    a[r][k]=a[r][k]/max;
                }
            }
    }
        for(int r=0;r<ku;r++)
        {
            for(int p=0;p<5;p++)
            {
                if(r==c)
                {
                    temp[p]=a[r][p];
                }
                else
                {
                    a[r][p]=a[r][p]-(a[c][p]*a[r][cl]);
                }
            }
        }
        for(int i=0;i<ku;i++)
        {
                for(int pi=0;pi<5;pi++)
            {
                a[c][pi]=a[ku][pi];
                a[ku][pi]=temp[pi];
            }
        }

        for(int j=0;j<5;j++)
            {
                cout<<" temp:"<<temp[j]<<"           ";
            }
            cout<<endl<<endl;
        for(int i=0;i<ku-1;i++)
        {
            for(int j=0;j<5;j++)
            {
                cout<<a[i][j]<<"           ";
            }
            cout<<endl;
        }
    }
    }

1 个答案:

答案 0 :(得分:0)

您的条件为if(abs(a[i][j])>max),因此您似乎在比较幅度。在下一行,您分配max=a[i][j],它将存储一个负数。下一次迭代将替换它。

您要存储的是

max = abs(a[i][j]);