Example: Using Equality and Inequality Operators

The functions is_equal and is_not_equal in the following example provide a reliable comparison between two complex values:

// Testing complex values for equality within a certain tolerance
#include <complex.h>
#include <iostream.h>            // for output
#include <iomanip.h>             // for use of setw() manipulator
int is_equal(const complex &a, const complex &b,
             const double tol=0.0001)
{
   return (abs(real(a) - real(b)) < tol &&
           abs(imag(a) - imag(b)) < tol);
} 
int is_not_equal(const complex &a, const complex &b,
                 const double tol=0.0001)
{
   return !is_equal(a, b, tol);
} 
void main()
{
   complex c[4] = { complex(1.0, 2.0),
                    complex(1.0, 2.0),
                    complex(3.0, 4.0),
                    complex(1.0000163,1.999903581)}; 
   cout << "Comparison of array elements c[0] to c[3]\n"
        << "== means identical,\n!= means unequal,\n"
        << " ~ means equal within tolerance of 0.0001.\n\n"
        << setw(10) << "Element"
        << setw(6) << 0
        << setw(6) << 1
        << setw(6) << 2
        << setw(6) << 3
        << endl;
   for (int i=0;i<4;i++) {
      cout << setw(10) << i;
      for (int j=0;j<4;j++) {
         if (c[i]==c[j]) cout << setw(6) << "==";
         else if (is_equal(c[i],c[j])) cout << setw(6) << "~";
            else if (is_not_equal(c[i],c[j])) cout << setw(6) << "!=";
               else cout << setw(6) << "???"; 
         }
      cout << endl;
      }
   } 

This example produces the following output:

Comparison of array elements c[0] to c[3]
== means identical,
!= means unequal,
 ~ means equal within tolerance of 0.0001.
 
   Element     0     1     2     3
         0    ==    ==    !=     ~
         1    ==    ==    !=     ~
         2    !=    !=    ==    !=
         3     ~     ~    !=    ==