#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 r56295 = x;
        float r56296 = y;
        float r56297 = r56295 * r56296;
        float r56298 = z;
        float r56299 = t;
        float r56300 = r56298 * r56299;
        float r56301 = r56297 - r56300;
        float r56302 = a;
        float r56303 = r56301 / r56302;
        return r56303;
}

double f_id(double x, double y, double z, double t, double a) {
        double r56304 = x;
        double r56305 = y;
        double r56306 = r56304 * r56305;
        double r56307 = z;
        double r56308 = t;
        double r56309 = r56307 * r56308;
        double r56310 = r56306 - r56309;
        double r56311 = a;
        double r56312 = r56310 / r56311;
        return r56312;
}


double f_of(float x, float y, float z, float t, float a) {
        float r56313 = a;
        float r56314 = -5.7933311388628865e+190f;
        bool r56315 = r56313 <= r56314;
        float r56316 = y;
        float r56317 = x;
        float r56318 = r56313 / r56317;
        float r56319 = r56316 / r56318;
        float r56320 = z;
        float r56321 = t;
        float r56322 = r56313 / r56321;
        float r56323 = r56320 / r56322;
        float r56324 = r56319 - r56323;
        float r56325 = 3.8124686331119876e+40f;
        bool r56326 = r56313 <= r56325;
        float r56327 = 1.0f;
        float r56328 = r56317 * r56316;
        float r56329 = r56320 * r56321;
        float r56330 = r56328 - r56329;
        float r56331 = r56313 / r56330;
        float r56332 = r56327 / r56331;
        float r56333 = r56326 ? r56332 : r56324;
        float r56334 = r56315 ? r56324 : r56333;
        return r56334;
}

double f_od(double x, double y, double z, double t, double a) {
        double r56335 = a;
        double r56336 = -5.7933311388628865e+190;
        bool r56337 = r56335 <= r56336;
        double r56338 = y;
        double r56339 = x;
        double r56340 = r56335 / r56339;
        double r56341 = r56338 / r56340;
        double r56342 = z;
        double r56343 = t;
        double r56344 = r56335 / r56343;
        double r56345 = r56342 / r56344;
        double r56346 = r56341 - r56345;
        double r56347 = 3.8124686331119876e+40;
        bool r56348 = r56335 <= r56347;
        double r56349 = 1.0;
        double r56350 = r56339 * r56338;
        double r56351 = r56342 * r56343;
        double r56352 = r56350 - r56351;
        double r56353 = r56335 / r56352;
        double r56354 = r56349 / r56353;
        double r56355 = r56348 ? r56354 : r56346;
        double r56356 = r56337 ? r56346 : r56355;
        return r56356;
}

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 r56357, r56358, r56359, r56360, r56361, r56362, r56363, r56364, r56365;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r56357);
        mpfr_init(r56358);
        mpfr_init(r56359);
        mpfr_init(r56360);
        mpfr_init(r56361);
        mpfr_init(r56362);
        mpfr_init(r56363);
        mpfr_init(r56364);
        mpfr_init(r56365);
}

double f_im(double x, double y, double z, double t, double a) {
        mpfr_set_d(r56357, x, MPFR_RNDN);
        mpfr_set_d(r56358, y, MPFR_RNDN);
        mpfr_mul(r56359, r56357, r56358, MPFR_RNDN);
        mpfr_set_d(r56360, z, MPFR_RNDN);
        mpfr_set_d(r56361, t, MPFR_RNDN);
        mpfr_mul(r56362, r56360, r56361, MPFR_RNDN);
        mpfr_sub(r56363, r56359, r56362, MPFR_RNDN);
        mpfr_set_d(r56364, a, MPFR_RNDN);
        mpfr_div(r56365, r56363, r56364, MPFR_RNDN);
        return mpfr_get_d(r56365, MPFR_RNDN);
}

static mpfr_t r56366, r56367, r56368, r56369, r56370, r56371, r56372, r56373, r56374, r56375, r56376, r56377, r56378, r56379, r56380, r56381, r56382, r56383, r56384, r56385, r56386, r56387;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r56366);
        mpfr_init_set_str(r56367, "-5.7933311388628865e+190", 10, MPFR_RNDN);
        mpfr_init(r56368);
        mpfr_init(r56369);
        mpfr_init(r56370);
        mpfr_init(r56371);
        mpfr_init(r56372);
        mpfr_init(r56373);
        mpfr_init(r56374);
        mpfr_init(r56375);
        mpfr_init(r56376);
        mpfr_init(r56377);
        mpfr_init_set_str(r56378, "3.8124686331119876e+40", 10, MPFR_RNDN);
        mpfr_init(r56379);
        mpfr_init_set_str(r56380, "1", 10, MPFR_RNDN);
        mpfr_init(r56381);
        mpfr_init(r56382);
        mpfr_init(r56383);
        mpfr_init(r56384);
        mpfr_init(r56385);
        mpfr_init(r56386);
        mpfr_init(r56387);
}

double f_fm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r56366, a, MPFR_RNDN);
        ;
        mpfr_set_si(r56368, mpfr_cmp(r56366, r56367) <= 0, MPFR_RNDN);
        mpfr_set_d(r56369, y, MPFR_RNDN);
        mpfr_set_d(r56370, x, MPFR_RNDN);
        mpfr_div(r56371, r56366, r56370, MPFR_RNDN);
        mpfr_div(r56372, r56369, r56371, MPFR_RNDN);
        mpfr_set_d(r56373, z, MPFR_RNDN);
        mpfr_set_d(r56374, t, MPFR_RNDN);
        mpfr_div(r56375, r56366, r56374, MPFR_RNDN);
        mpfr_div(r56376, r56373, r56375, MPFR_RNDN);
        mpfr_sub(r56377, r56372, r56376, MPFR_RNDN);
        ;
        mpfr_set_si(r56379, mpfr_cmp(r56366, r56378) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r56381, r56370, r56369, MPFR_RNDN);
        mpfr_mul(r56382, r56373, r56374, MPFR_RNDN);
        mpfr_sub(r56383, r56381, r56382, MPFR_RNDN);
        mpfr_div(r56384, r56366, r56383, MPFR_RNDN);
        mpfr_div(r56385, r56380, r56384, MPFR_RNDN);
        if (mpfr_get_si(r56379, MPFR_RNDN)) { mpfr_set(r56386, r56385, MPFR_RNDN); } else { mpfr_set(r56386, r56377, MPFR_RNDN); };
        if (mpfr_get_si(r56368, MPFR_RNDN)) { mpfr_set(r56387, r56377, MPFR_RNDN); } else { mpfr_set(r56387, r56386, MPFR_RNDN); };
        return mpfr_get_d(r56387, MPFR_RNDN);
}

static mpfr_t r56388, r56389, r56390, r56391, r56392, r56393, r56394, r56395, r56396, r56397, r56398, r56399, r56400, r56401, r56402, r56403, r56404, r56405, r56406, r56407, r56408, r56409;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r56388);
        mpfr_init_set_str(r56389, "-5.7933311388628865e+190", 10, MPFR_RNDN);
        mpfr_init(r56390);
        mpfr_init(r56391);
        mpfr_init(r56392);
        mpfr_init(r56393);
        mpfr_init(r56394);
        mpfr_init(r56395);
        mpfr_init(r56396);
        mpfr_init(r56397);
        mpfr_init(r56398);
        mpfr_init(r56399);
        mpfr_init_set_str(r56400, "3.8124686331119876e+40", 10, MPFR_RNDN);
        mpfr_init(r56401);
        mpfr_init_set_str(r56402, "1", 10, MPFR_RNDN);
        mpfr_init(r56403);
        mpfr_init(r56404);
        mpfr_init(r56405);
        mpfr_init(r56406);
        mpfr_init(r56407);
        mpfr_init(r56408);
        mpfr_init(r56409);
}

double f_dm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r56388, a, MPFR_RNDN);
        ;
        mpfr_set_si(r56390, mpfr_cmp(r56388, r56389) <= 0, MPFR_RNDN);
        mpfr_set_d(r56391, y, MPFR_RNDN);
        mpfr_set_d(r56392, x, MPFR_RNDN);
        mpfr_div(r56393, r56388, r56392, MPFR_RNDN);
        mpfr_div(r56394, r56391, r56393, MPFR_RNDN);
        mpfr_set_d(r56395, z, MPFR_RNDN);
        mpfr_set_d(r56396, t, MPFR_RNDN);
        mpfr_div(r56397, r56388, r56396, MPFR_RNDN);
        mpfr_div(r56398, r56395, r56397, MPFR_RNDN);
        mpfr_sub(r56399, r56394, r56398, MPFR_RNDN);
        ;
        mpfr_set_si(r56401, mpfr_cmp(r56388, r56400) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r56403, r56392, r56391, MPFR_RNDN);
        mpfr_mul(r56404, r56395, r56396, MPFR_RNDN);
        mpfr_sub(r56405, r56403, r56404, MPFR_RNDN);
        mpfr_div(r56406, r56388, r56405, MPFR_RNDN);
        mpfr_div(r56407, r56402, r56406, MPFR_RNDN);
        if (mpfr_get_si(r56401, MPFR_RNDN)) { mpfr_set(r56408, r56407, MPFR_RNDN); } else { mpfr_set(r56408, r56399, MPFR_RNDN); };
        if (mpfr_get_si(r56390, MPFR_RNDN)) { mpfr_set(r56409, r56399, MPFR_RNDN); } else { mpfr_set(r56409, r56408, MPFR_RNDN); };
        return mpfr_get_d(r56409, MPFR_RNDN);
}

