ocmath_compare_data

 

Description

Compare two vectors or matrices cell by cell in predefined tolerance.

Syntax

int ocmath_compare_data( int nSize, const double * pData1, const double * pData2, bool * bIsSame, double dTolerance = 1e-10, bool bAbsoluteError = true )

Parameters

nSize
[input] Size of vector or matrix
pData1
[input] Pointer to the first data array
pData2
[input] Pointer to the second data array
bIsSame
[output] Compared result:
true: The two data arrays are same cell by cell in predefined tolerance
false: The two data arrays have some different cell.
dTolerance
[input] Tolerance predefined
bAbsoluteError
[input] Using absolute error or relative error when compare

Return

Returns 0 on success and a non-zero error code on failure.

Examples

EX1

void ocmath_compare_data_ex1()
{
    vector v1 = {1.8999988888, 2.5556775766, 4.567788522, 5.144244553, 6.4133515166};
    vector v2 = {1.899998888801, 2.555677576601, 4.56778852201, 5.14424455301, 6.413351516601};
    bool bIsSame = false;
    double dTolerance = 1e-10;
    int nRet = ocmath_compare_data(v1.GetSize(), v1, v2, &bIsSame, dTolerance);
    if(nRet == OE_NOERROR)
    {
        if(bIsSame)
            printf("The two vectors are same in predefined tolerance: %.11f\n", dTolerance);
        else
            printf("The two vectors have different cell in predefined tolerance: %.11f\n", dTolerance);

    }
    
    dTolerance = 1e-11;
    nRet = ocmath_compare_data(v1.GetSize(), v1, v2, &bIsSame, dTolerance);
    if(nRet == OE_NOERROR)
    {
        if(bIsSame)
            printf("The two vectors are same in predefined tolerance: %.11f\n", dTolerance);
        else
            printf("The two vectors have different cell in predefined tolerance: %.11f\n", dTolerance);
    }
}

EX2

void ocmath_compare_data_ex2()
{
    matrix mat1 = {{1.8999988888, 2.5556775766, 4.567788522},
                   {5.144244553, 6.4133515166, 7.3155355556}};
    matrix mat2 = {{1.899998888801, 2.555677576601, 4.56778852201}, 
                   {5.14424455301, 6.413351516601, 7.315535555601}};
    int nRows = mat1.GetNumRows();
    int nCols = mat2.GetNumCols();
    bool bIsSame = false;
    double dTolerance = 1e-10;
    int nRet = ocmath_compare_data(nRows*nCols, mat1, mat2, &bIsSame, dTolerance);
    if(nRet == OE_NOERROR)
    {
        if(bIsSame)
            printf("The two matrices are same in predefined tolerance: %.11f\n", dTolerance);
        else
            printf("The two matrices have different cell in predefined tolerance: %.11f\n", dTolerance);
    }
    
    dTolerance = 1e-11;
    nRet = ocmath_compare_data(nRows*nCols, mat1, mat2, &bIsSame, dTolerance);
    if(nRet == OE_NOERROR)
    {
        if(bIsSame)
            printf("The two matrices are same in predefined tolerance: %.11f\n", dTolerance);
        else
            printf("The two matrices have different cell in predefined tolerance: %.11f\n", dTolerance);
    }
}

Remark

See Also

vec_is_equal

header to Include

origin.h

Reference