Developer Guide

  • 2021.1
  • 12/04/2020
  • Public Content
Contents

Using Complex Types in C/C++

As described in the documentation for the Intel® Fortran Compiler, C/C++ does not directly implement the Fortran types
COMPLEX(4)
and
COMPLEX(8)
. However, you can write equivalent structures. The type
COMPLEX(4)
consists of two 4-byte floating-point numbers. The first of them is the real-number component, and the second one is the imaginary-number component. The type
COMPLEX(8)
is similar to
COMPLEX(4)
except that it contains two 8-byte floating-point numbers.
Intel® oneAPI Math Kernel Library
provides complex types
MKL_Complex8
and
MKL_Complex16
, which are structures equivalent to the Fortran complex types
COMPLEX(4)
and
COMPLEX(8)
, respectively. The
MKL_Complex8
and
MKL_Complex16
types are defined in the
mkl_types.h
header file. You can use these types to define complex data. You can also redefine the types with your own types before including the
mkl_types.h
header file. The only requirement is that the types must be compatible with the Fortran complex layout, that is, the complex type must be a pair of real numbers for the values of real and imaginary parts.
For example, you can use the following definitions in your C++ code:
#define MKL_Complex8 std::complex<float>
and
#define MKL_Complex16 std::complex<double>
See Example "Calling a Complex BLAS Level 1 Function from C++" for details. You can also define these types in the command line:
-DMKL_Complex8="std::complex<float>" -DMKL_Complex16="std::complex<double>"

Product and Performance Information

1

Performance varies by use, configuration and other factors. Learn more at www.Intel.com/PerformanceIndex.