ABS 函数在 C++ 中没有给出正确的答案

abs function is not giving right answer in c++?

本文关键字:答案 函数 C++ ABS      更新时间:2023-10-16

我正在研究一种完整的高斯消除枢轴方法。唯一的问题是abs()功能。

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

如果有人知道,请告诉我错误。详细信息:在第一个循环中,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;
        }
    }
    }

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

您要存储的内容是

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