#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "Data.Colour.Matrix:inverse from colour-2.3.3, B";

double f_if(float x, float y, float z, float t, float a) {
        float r56967 = x;
        float r56968 = y;
        float r56969 = r56967 * r56968;
        float r56970 = z;
        float r56971 = t;
        float r56972 = r56970 * r56971;
        float r56973 = r56969 - r56972;
        float r56974 = a;
        float r56975 = r56973 / r56974;
        return r56975;
}

double f_id(double x, double y, double z, double t, double a) {
        double r56976 = x;
        double r56977 = y;
        double r56978 = r56976 * r56977;
        double r56979 = z;
        double r56980 = t;
        double r56981 = r56979 * r56980;
        double r56982 = r56978 - r56981;
        double r56983 = a;
        double r56984 = r56982 / r56983;
        return r56984;
}


double f_of(float x, float y, float z, float t, float a) {
        float r56985 = a;
        float r56986 = 6.402428444718094e+86;
        bool r56987 = r56985 <= r56986;
        float r56988 = x;
        float r56989 = y;
        float r56990 = r56988 * r56989;
        float r56991 = z;
        float r56992 = t;
        float r56993 = r56991 * r56992;
        float r56994 = r56990 - r56993;
        float r56995 = 1;
        float r56996 = r56995 / r56985;
        float r56997 = r56994 * r56996;
        float r56998 = 2.3202598501789406e+195;
        bool r56999 = r56985 <= r56998;
        float r57000 = -1;
        float r57001 = cbrt(r57000);
        float r57002 = r56991 / r56985;
        float r57003 = r56992 * r57002;
        float r57004 = r56989 / r56985;
        float r57005 = r56988 * r57004;
        float r57006 = r57003 - r57005;
        float r57007 = r57001 * r57006;
        float r57008 = r56999 ? r57007 : r56997;
        float r57009 = r56987 ? r56997 : r57008;
        return r57009;
}

double f_od(double x, double y, double z, double t, double a) {
        double r57010 = a;
        double r57011 = 6.402428444718094e+86;
        bool r57012 = r57010 <= r57011;
        double r57013 = x;
        double r57014 = y;
        double r57015 = r57013 * r57014;
        double r57016 = z;
        double r57017 = t;
        double r57018 = r57016 * r57017;
        double r57019 = r57015 - r57018;
        double r57020 = 1;
        double r57021 = r57020 / r57010;
        double r57022 = r57019 * r57021;
        double r57023 = 2.3202598501789406e+195;
        bool r57024 = r57010 <= r57023;
        double r57025 = -1;
        double r57026 = cbrt(r57025);
        double r57027 = r57016 / r57010;
        double r57028 = r57017 * r57027;
        double r57029 = r57014 / r57010;
        double r57030 = r57013 * r57029;
        double r57031 = r57028 - r57030;
        double r57032 = r57026 * r57031;
        double r57033 = r57024 ? r57032 : r57022;
        double r57034 = r57012 ? r57022 : r57033;
        return r57034;
}

void mpfr_fmod2(mpfr_t r, mpfr_t n, mpfr_t d, mpfr_rnd_t rmd) {
        mpfr_fmod(r, n, d, rmd);
        if (mpfr_cmp_ui(r, 0) < 0) mpfr_add(r, r, d, rmd);
}


static mpfr_t r57035, r57036, r57037, r57038, r57039, r57040, r57041, r57042, r57043;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r57035);
        mpfr_init(r57036);
        mpfr_init(r57037);
        mpfr_init(r57038);
        mpfr_init(r57039);
        mpfr_init(r57040);
        mpfr_init(r57041);
        mpfr_init(r57042);
        mpfr_init(r57043);
}

double f_im(double x, double y, double z, double t, double a) {
        mpfr_set_d(r57035, x, MPFR_RNDN);
        mpfr_set_d(r57036, y, MPFR_RNDN);
        mpfr_mul(r57037, r57035, r57036, MPFR_RNDN);
        mpfr_set_d(r57038, z, MPFR_RNDN);
        mpfr_set_d(r57039, t, MPFR_RNDN);
        mpfr_mul(r57040, r57038, r57039, MPFR_RNDN);
        mpfr_sub(r57041, r57037, r57040, MPFR_RNDN);
        mpfr_set_d(r57042, a, MPFR_RNDN);
        mpfr_div(r57043, r57041, r57042, MPFR_RNDN);
        return mpfr_get_d(r57043, MPFR_RNDN);
}

static mpfr_t r57044, r57045, r57046, r57047, r57048, r57049, r57050, r57051, r57052, r57053, r57054, r57055, r57056, r57057, r57058, r57059, r57060, r57061, r57062, r57063, r57064, r57065, r57066, r57067, r57068;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57044);
        mpfr_init_set_str(r57045, "6.402428444718094e+86", 10, MPFR_RNDN);
        mpfr_init(r57046);
        mpfr_init(r57047);
        mpfr_init(r57048);
        mpfr_init(r57049);
        mpfr_init(r57050);
        mpfr_init(r57051);
        mpfr_init(r57052);
        mpfr_init(r57053);
        mpfr_init_set_str(r57054, "1", 10, MPFR_RNDN);
        mpfr_init(r57055);
        mpfr_init(r57056);
        mpfr_init_set_str(r57057, "2.3202598501789406e+195", 10, MPFR_RNDN);
        mpfr_init(r57058);
        mpfr_init_set_str(r57059, "-1", 10, MPFR_RNDN);
        mpfr_init(r57060);
        mpfr_init(r57061);
        mpfr_init(r57062);
        mpfr_init(r57063);
        mpfr_init(r57064);
        mpfr_init(r57065);
        mpfr_init(r57066);
        mpfr_init(r57067);
        mpfr_init(r57068);
}

double f_fm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r57044, a, MPFR_RNDN);
        ;
        mpfr_set_si(r57046, mpfr_cmp(r57044, r57045) <= 0, MPFR_RNDN);
        mpfr_set_d(r57047, x, MPFR_RNDN);
        mpfr_set_d(r57048, y, MPFR_RNDN);
        mpfr_mul(r57049, r57047, r57048, MPFR_RNDN);
        mpfr_set_d(r57050, z, MPFR_RNDN);
        mpfr_set_d(r57051, t, MPFR_RNDN);
        mpfr_mul(r57052, r57050, r57051, MPFR_RNDN);
        mpfr_sub(r57053, r57049, r57052, MPFR_RNDN);
        ;
        mpfr_div(r57055, r57054, r57044, MPFR_RNDN);
        mpfr_mul(r57056, r57053, r57055, MPFR_RNDN);
        ;
        mpfr_set_si(r57058, mpfr_cmp(r57044, r57057) <= 0, MPFR_RNDN);
        ;
        mpfr_cbrt(r57060, r57059, MPFR_RNDN);
        mpfr_div(r57061, r57050, r57044, MPFR_RNDN);
        mpfr_mul(r57062, r57051, r57061, MPFR_RNDN);
        mpfr_div(r57063, r57048, r57044, MPFR_RNDN);
        mpfr_mul(r57064, r57047, r57063, MPFR_RNDN);
        mpfr_sub(r57065, r57062, r57064, MPFR_RNDN);
        mpfr_mul(r57066, r57060, r57065, MPFR_RNDN);
        if (mpfr_get_si(r57058, MPFR_RNDN)) { mpfr_set(r57067, r57066, MPFR_RNDN); } else { mpfr_set(r57067, r57056, MPFR_RNDN); };
        if (mpfr_get_si(r57046, MPFR_RNDN)) { mpfr_set(r57068, r57056, MPFR_RNDN); } else { mpfr_set(r57068, r57067, MPFR_RNDN); };
        return mpfr_get_d(r57068, MPFR_RNDN);
}

static mpfr_t r57069, r57070, r57071, r57072, r57073, r57074, r57075, r57076, r57077, r57078, r57079, r57080, r57081, r57082, r57083, r57084, r57085, r57086, r57087, r57088, r57089, r57090, r57091, r57092, r57093;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57069);
        mpfr_init_set_str(r57070, "6.402428444718094e+86", 10, MPFR_RNDN);
        mpfr_init(r57071);
        mpfr_init(r57072);
        mpfr_init(r57073);
        mpfr_init(r57074);
        mpfr_init(r57075);
        mpfr_init(r57076);
        mpfr_init(r57077);
        mpfr_init(r57078);
        mpfr_init_set_str(r57079, "1", 10, MPFR_RNDN);
        mpfr_init(r57080);
        mpfr_init(r57081);
        mpfr_init_set_str(r57082, "2.3202598501789406e+195", 10, MPFR_RNDN);
        mpfr_init(r57083);
        mpfr_init_set_str(r57084, "-1", 10, MPFR_RNDN);
        mpfr_init(r57085);
        mpfr_init(r57086);
        mpfr_init(r57087);
        mpfr_init(r57088);
        mpfr_init(r57089);
        mpfr_init(r57090);
        mpfr_init(r57091);
        mpfr_init(r57092);
        mpfr_init(r57093);
}

double f_dm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r57069, a, MPFR_RNDN);
        ;
        mpfr_set_si(r57071, mpfr_cmp(r57069, r57070) <= 0, MPFR_RNDN);
        mpfr_set_d(r57072, x, MPFR_RNDN);
        mpfr_set_d(r57073, y, MPFR_RNDN);
        mpfr_mul(r57074, r57072, r57073, MPFR_RNDN);
        mpfr_set_d(r57075, z, MPFR_RNDN);
        mpfr_set_d(r57076, t, MPFR_RNDN);
        mpfr_mul(r57077, r57075, r57076, MPFR_RNDN);
        mpfr_sub(r57078, r57074, r57077, MPFR_RNDN);
        ;
        mpfr_div(r57080, r57079, r57069, MPFR_RNDN);
        mpfr_mul(r57081, r57078, r57080, MPFR_RNDN);
        ;
        mpfr_set_si(r57083, mpfr_cmp(r57069, r57082) <= 0, MPFR_RNDN);
        ;
        mpfr_cbrt(r57085, r57084, MPFR_RNDN);
        mpfr_div(r57086, r57075, r57069, MPFR_RNDN);
        mpfr_mul(r57087, r57076, r57086, MPFR_RNDN);
        mpfr_div(r57088, r57073, r57069, MPFR_RNDN);
        mpfr_mul(r57089, r57072, r57088, MPFR_RNDN);
        mpfr_sub(r57090, r57087, r57089, MPFR_RNDN);
        mpfr_mul(r57091, r57085, r57090, MPFR_RNDN);
        if (mpfr_get_si(r57083, MPFR_RNDN)) { mpfr_set(r57092, r57091, MPFR_RNDN); } else { mpfr_set(r57092, r57081, MPFR_RNDN); };
        if (mpfr_get_si(r57071, MPFR_RNDN)) { mpfr_set(r57093, r57081, MPFR_RNDN); } else { mpfr_set(r57093, r57092, MPFR_RNDN); };
        return mpfr_get_d(r57093, MPFR_RNDN);
}

