Visible to Intel only — GUID: GUID-9A806754-1453-4433-9254-6FEA2C66B21B
Visible to Intel only — GUID: GUID-9A806754-1453-4433-9254-6FEA2C66B21B
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 typesMKL_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>"