/*
    Copied from the C99 standard
*/
#include <math.h>
#include <complex.h>

double complex _stdcall __CPLXMULLIM(long double complex z, long double complex w)
{
    #pragma STDC FP_CONTRACT OFF
    long double a, b, c, d, ac, bd, ad, bc, x, y;
    a = creall(z); b = cimagl(z);
    c = creall(w); d = cimagl(w);
    ac = a * c; bd = b * d;
    ad = a * d; bc = b * c;
    x = ac - bd;
    y = ad + bc;
    return x + I * y;
}