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

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

double f_if(float x, float y, float z, float t, float a, float b, float c, float i, float j) {
        float r56410 = x;
        float r56411 = y;
        float r56412 = z;
        float r56413 = r56411 * r56412;
        float r56414 = t;
        float r56415 = a;
        float r56416 = r56414 * r56415;
        float r56417 = r56413 - r56416;
        float r56418 = r56410 * r56417;
        float r56419 = b;
        float r56420 = c;
        float r56421 = r56420 * r56412;
        float r56422 = i;
        float r56423 = r56414 * r56422;
        float r56424 = r56421 - r56423;
        float r56425 = r56419 * r56424;
        float r56426 = r56418 - r56425;
        float r56427 = j;
        float r56428 = r56420 * r56415;
        float r56429 = r56411 * r56422;
        float r56430 = r56428 - r56429;
        float r56431 = r56427 * r56430;
        float r56432 = r56426 + r56431;
        return r56432;
}

double f_id(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        double r56433 = x;
        double r56434 = y;
        double r56435 = z;
        double r56436 = r56434 * r56435;
        double r56437 = t;
        double r56438 = a;
        double r56439 = r56437 * r56438;
        double r56440 = r56436 - r56439;
        double r56441 = r56433 * r56440;
        double r56442 = b;
        double r56443 = c;
        double r56444 = r56443 * r56435;
        double r56445 = i;
        double r56446 = r56437 * r56445;
        double r56447 = r56444 - r56446;
        double r56448 = r56442 * r56447;
        double r56449 = r56441 - r56448;
        double r56450 = j;
        double r56451 = r56443 * r56438;
        double r56452 = r56434 * r56445;
        double r56453 = r56451 - r56452;
        double r56454 = r56450 * r56453;
        double r56455 = r56449 + r56454;
        return r56455;
}


double f_of(float x, float y, float z, float t, float a, float b, float c, float i, float j) {
        float r56456 = x;
        float r56457 = y;
        float r56458 = z;
        float r56459 = r56457 * r56458;
        float r56460 = t;
        float r56461 = a;
        float r56462 = r56460 * r56461;
        float r56463 = r56459 - r56462;
        float r56464 = r56456 * r56463;
        float r56465 = b;
        float r56466 = c;
        float r56467 = r56466 * r56458;
        float r56468 = i;
        float r56469 = r56460 * r56468;
        float r56470 = r56467 - r56469;
        float r56471 = r56465 * r56470;
        float r56472 = r56464 - r56471;
        float r56473 = j;
        float r56474 = r56466 * r56461;
        float r56475 = r56457 * r56468;
        float r56476 = r56474 - r56475;
        float r56477 = r56473 * r56476;
        float r56478 = cbrt(r56477);
        float r56479 = r56478 * (r56478 * r56478);
        float r56480 = r56472 + r56479;
        return r56480;
}

double f_od(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        double r56481 = x;
        double r56482 = y;
        double r56483 = z;
        double r56484 = r56482 * r56483;
        double r56485 = t;
        double r56486 = a;
        double r56487 = r56485 * r56486;
        double r56488 = r56484 - r56487;
        double r56489 = r56481 * r56488;
        double r56490 = b;
        double r56491 = c;
        double r56492 = r56491 * r56483;
        double r56493 = i;
        double r56494 = r56485 * r56493;
        double r56495 = r56492 - r56494;
        double r56496 = r56490 * r56495;
        double r56497 = r56489 - r56496;
        double r56498 = j;
        double r56499 = r56491 * r56486;
        double r56500 = r56482 * r56493;
        double r56501 = r56499 - r56500;
        double r56502 = r56498 * r56501;
        double r56503 = cbrt(r56502);
        double r56504 = r56503 * (r56503 * r56503);
        double r56505 = r56497 + r56504;
        return r56505;
}

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 r56506, r56507, r56508, r56509, r56510, r56511, r56512, r56513, r56514, r56515, r56516, r56517, r56518, r56519, r56520, r56521, r56522, r56523, r56524, r56525, r56526, r56527, r56528;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r56506);
        mpfr_init(r56507);
        mpfr_init(r56508);
        mpfr_init(r56509);
        mpfr_init(r56510);
        mpfr_init(r56511);
        mpfr_init(r56512);
        mpfr_init(r56513);
        mpfr_init(r56514);
        mpfr_init(r56515);
        mpfr_init(r56516);
        mpfr_init(r56517);
        mpfr_init(r56518);
        mpfr_init(r56519);
        mpfr_init(r56520);
        mpfr_init(r56521);
        mpfr_init(r56522);
        mpfr_init(r56523);
        mpfr_init(r56524);
        mpfr_init(r56525);
        mpfr_init(r56526);
        mpfr_init(r56527);
        mpfr_init(r56528);
}

double f_im(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        mpfr_set_d(r56506, x, MPFR_RNDN);
        mpfr_set_d(r56507, y, MPFR_RNDN);
        mpfr_set_d(r56508, z, MPFR_RNDN);
        mpfr_mul(r56509, r56507, r56508, MPFR_RNDN);
        mpfr_set_d(r56510, t, MPFR_RNDN);
        mpfr_set_d(r56511, a, MPFR_RNDN);
        mpfr_mul(r56512, r56510, r56511, MPFR_RNDN);
        mpfr_sub(r56513, r56509, r56512, MPFR_RNDN);
        mpfr_mul(r56514, r56506, r56513, MPFR_RNDN);
        mpfr_set_d(r56515, b, MPFR_RNDN);
        mpfr_set_d(r56516, c, MPFR_RNDN);
        mpfr_mul(r56517, r56516, r56508, MPFR_RNDN);
        mpfr_set_d(r56518, i, MPFR_RNDN);
        mpfr_mul(r56519, r56510, r56518, MPFR_RNDN);
        mpfr_sub(r56520, r56517, r56519, MPFR_RNDN);
        mpfr_mul(r56521, r56515, r56520, MPFR_RNDN);
        mpfr_sub(r56522, r56514, r56521, MPFR_RNDN);
        mpfr_set_d(r56523, j, MPFR_RNDN);
        mpfr_mul(r56524, r56516, r56511, MPFR_RNDN);
        mpfr_mul(r56525, r56507, r56518, MPFR_RNDN);
        mpfr_sub(r56526, r56524, r56525, MPFR_RNDN);
        mpfr_mul(r56527, r56523, r56526, MPFR_RNDN);
        mpfr_add(r56528, r56522, r56527, MPFR_RNDN);
        return mpfr_get_d(r56528, MPFR_RNDN);
}

static mpfr_t r56529, r56530, r56531, r56532, r56533, r56534, r56535, r56536, r56537, r56538, r56539, r56540, r56541, r56542, r56543, r56544, r56545, r56546, r56547, r56548, r56549, r56550, r56551, r56552, r56553;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r56529);
        mpfr_init(r56530);
        mpfr_init(r56531);
        mpfr_init(r56532);
        mpfr_init(r56533);
        mpfr_init(r56534);
        mpfr_init(r56535);
        mpfr_init(r56536);
        mpfr_init(r56537);
        mpfr_init(r56538);
        mpfr_init(r56539);
        mpfr_init(r56540);
        mpfr_init(r56541);
        mpfr_init(r56542);
        mpfr_init(r56543);
        mpfr_init(r56544);
        mpfr_init(r56545);
        mpfr_init(r56546);
        mpfr_init(r56547);
        mpfr_init(r56548);
        mpfr_init(r56549);
        mpfr_init(r56550);
        mpfr_init(r56551);
        mpfr_init(r56552);
        mpfr_init(r56553);
}

double f_fm(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        mpfr_set_d(r56529, x, MPFR_RNDN);
        mpfr_set_d(r56530, y, MPFR_RNDN);
        mpfr_set_d(r56531, z, MPFR_RNDN);
        mpfr_mul(r56532, r56530, r56531, MPFR_RNDN);
        mpfr_set_d(r56533, t, MPFR_RNDN);
        mpfr_set_d(r56534, a, MPFR_RNDN);
        mpfr_mul(r56535, r56533, r56534, MPFR_RNDN);
        mpfr_sub(r56536, r56532, r56535, MPFR_RNDN);
        mpfr_mul(r56537, r56529, r56536, MPFR_RNDN);
        mpfr_set_d(r56538, b, MPFR_RNDN);
        mpfr_set_d(r56539, c, MPFR_RNDN);
        mpfr_mul(r56540, r56539, r56531, MPFR_RNDN);
        mpfr_set_d(r56541, i, MPFR_RNDN);
        mpfr_mul(r56542, r56533, r56541, MPFR_RNDN);
        mpfr_sub(r56543, r56540, r56542, MPFR_RNDN);
        mpfr_mul(r56544, r56538, r56543, MPFR_RNDN);
        mpfr_sub(r56545, r56537, r56544, MPFR_RNDN);
        mpfr_set_d(r56546, j, MPFR_RNDN);
        mpfr_mul(r56547, r56539, r56534, MPFR_RNDN);
        mpfr_mul(r56548, r56530, r56541, MPFR_RNDN);
        mpfr_sub(r56549, r56547, r56548, MPFR_RNDN);
        mpfr_mul(r56550, r56546, r56549, MPFR_RNDN);
        mpfr_cbrt(r56551, r56550, MPFR_RNDN);
        mpfr_mul(r56552, r56551, r56551, MPFR_RNDN); mpfr_mul(r56552, r56552, r56551, MPFR_RNDN);
        mpfr_add(r56553, r56545, r56552, MPFR_RNDN);
        return mpfr_get_d(r56553, MPFR_RNDN);
}

static mpfr_t r56554, r56555, r56556, r56557, r56558, r56559, r56560, r56561, r56562, r56563, r56564, r56565, r56566, r56567, r56568, r56569, r56570, r56571, r56572, r56573, r56574, r56575, r56576, r56577, r56578;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r56554);
        mpfr_init(r56555);
        mpfr_init(r56556);
        mpfr_init(r56557);
        mpfr_init(r56558);
        mpfr_init(r56559);
        mpfr_init(r56560);
        mpfr_init(r56561);
        mpfr_init(r56562);
        mpfr_init(r56563);
        mpfr_init(r56564);
        mpfr_init(r56565);
        mpfr_init(r56566);
        mpfr_init(r56567);
        mpfr_init(r56568);
        mpfr_init(r56569);
        mpfr_init(r56570);
        mpfr_init(r56571);
        mpfr_init(r56572);
        mpfr_init(r56573);
        mpfr_init(r56574);
        mpfr_init(r56575);
        mpfr_init(r56576);
        mpfr_init(r56577);
        mpfr_init(r56578);
}

double f_dm(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        mpfr_set_d(r56554, x, MPFR_RNDN);
        mpfr_set_d(r56555, y, MPFR_RNDN);
        mpfr_set_d(r56556, z, MPFR_RNDN);
        mpfr_mul(r56557, r56555, r56556, MPFR_RNDN);
        mpfr_set_d(r56558, t, MPFR_RNDN);
        mpfr_set_d(r56559, a, MPFR_RNDN);
        mpfr_mul(r56560, r56558, r56559, MPFR_RNDN);
        mpfr_sub(r56561, r56557, r56560, MPFR_RNDN);
        mpfr_mul(r56562, r56554, r56561, MPFR_RNDN);
        mpfr_set_d(r56563, b, MPFR_RNDN);
        mpfr_set_d(r56564, c, MPFR_RNDN);
        mpfr_mul(r56565, r56564, r56556, MPFR_RNDN);
        mpfr_set_d(r56566, i, MPFR_RNDN);
        mpfr_mul(r56567, r56558, r56566, MPFR_RNDN);
        mpfr_sub(r56568, r56565, r56567, MPFR_RNDN);
        mpfr_mul(r56569, r56563, r56568, MPFR_RNDN);
        mpfr_sub(r56570, r56562, r56569, MPFR_RNDN);
        mpfr_set_d(r56571, j, MPFR_RNDN);
        mpfr_mul(r56572, r56564, r56559, MPFR_RNDN);
        mpfr_mul(r56573, r56555, r56566, MPFR_RNDN);
        mpfr_sub(r56574, r56572, r56573, MPFR_RNDN);
        mpfr_mul(r56575, r56571, r56574, MPFR_RNDN);
        mpfr_cbrt(r56576, r56575, MPFR_RNDN);
        mpfr_mul(r56577, r56576, r56576, MPFR_RNDN); mpfr_mul(r56577, r56577, r56576, MPFR_RNDN);
        mpfr_add(r56578, r56570, r56577, MPFR_RNDN);
        return mpfr_get_d(r56578, MPFR_RNDN);
}

