Serenity Operating System
at master 45 lines 1.3 kB view raw
1/* 2 * Copyright (c) 2022, Peter Elliott <pelliott@serenityos.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7/* complex arithmetic 8 * 9 * https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/complex.h.html 10 */ 11 12#pragma once 13 14#include <stddef.h> 15#include <sys/cdefs.h> 16 17__BEGIN_DECLS 18 19#define complex _Complex 20 21#define _Complex_I (0.0f + 1.0fi) 22#define I _Complex_I 23 24#define CMPLX(x, y) ((double complex)__builtin_complex((double)x, (double)y)) 25#define CMPLXF(x, y) ((float complex)__builtin_complex((float)x, (float)y)) 26#define CMPLXL(x, y) ((long double complex)__builtin_complex((long double)x, (long double)y)) 27 28float crealf(float complex z); 29double creal(double complex z); 30long double creall(long double complex z); 31 32double cimag(double complex z); 33float cimagf(float complex z); 34long double cimagl(long double complex z); 35 36// These are macro implementations of the above functions, so that they will always be inlined. 37#define creal(z) ((double)__real__((double complex)z)) 38#define crealf(z) ((float)__real__((float complex)z)) 39#define creall(z) ((long double)__real__((long double complex)z)) 40 41#define cimag(z) ((double)__imag__((double complex)z)) 42#define cimagf(z) ((float)__imag__((float complex)z)) 43#define cimagl(z) ((long double)__imag__((long double complex)z)) 44 45__END_DECLS