#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 r57256 = x;
        float r57257 = y;
        float r57258 = z;
        float r57259 = r57257 * r57258;
        float r57260 = t;
        float r57261 = a;
        float r57262 = r57260 * r57261;
        float r57263 = r57259 - r57262;
        float r57264 = r57256 * r57263;
        float r57265 = b;
        float r57266 = c;
        float r57267 = r57266 * r57258;
        float r57268 = i;
        float r57269 = r57260 * r57268;
        float r57270 = r57267 - r57269;
        float r57271 = r57265 * r57270;
        float r57272 = r57264 - r57271;
        float r57273 = j;
        float r57274 = r57266 * r57261;
        float r57275 = r57257 * r57268;
        float r57276 = r57274 - r57275;
        float r57277 = r57273 * r57276;
        float r57278 = r57272 + r57277;
        return r57278;
}

double f_id(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        double r57279 = x;
        double r57280 = y;
        double r57281 = z;
        double r57282 = r57280 * r57281;
        double r57283 = t;
        double r57284 = a;
        double r57285 = r57283 * r57284;
        double r57286 = r57282 - r57285;
        double r57287 = r57279 * r57286;
        double r57288 = b;
        double r57289 = c;
        double r57290 = r57289 * r57281;
        double r57291 = i;
        double r57292 = r57283 * r57291;
        double r57293 = r57290 - r57292;
        double r57294 = r57288 * r57293;
        double r57295 = r57287 - r57294;
        double r57296 = j;
        double r57297 = r57289 * r57284;
        double r57298 = r57280 * r57291;
        double r57299 = r57297 - r57298;
        double r57300 = r57296 * r57299;
        double r57301 = r57295 + r57300;
        return r57301;
}


double f_of(float x, float y, float z, float t, float a, float b, float c, float i, float j) {
        float r57302 = x;
        float r57303 = -4.335731413434198e-76;
        bool r57304 = r57302 <= r57303;
        float r57305 = y;
        float r57306 = z;
        float r57307 = r57305 * r57306;
        float r57308 = t;
        float r57309 = a;
        float r57310 = r57308 * r57309;
        float r57311 = r57307 - r57310;
        float r57312 = r57302 * r57311;
        float r57313 = b;
        float r57314 = c;
        float r57315 = r57314 * r57306;
        float r57316 = i;
        float r57317 = r57308 * r57316;
        float r57318 = r57315 - r57317;
        float r57319 = cbrt(r57318);
        float r57320 = r57319 * r57319;
        float r57321 = r57313 * r57320;
        float r57322 = r57321 * r57319;
        float r57323 = r57312 - r57322;
        float r57324 = j;
        float r57325 = r57314 * r57309;
        float r57326 = r57305 * r57316;
        float r57327 = r57325 - r57326;
        float r57328 = r57324 * r57327;
        float r57329 = r57323 + r57328;
        float r57330 = 6.915320746710514e-242;
        bool r57331 = r57302 <= r57330;
        float r57332 = r57313 * r57316;
        float r57333 = r57302 * r57309;
        float r57334 = r57332 - r57333;
        float r57335 = r57334 * r57308;
        float r57336 = r57313 * r57314;
        float r57337 = r57336 * r57306;
        float r57338 = r57337 - r57328;
        float r57339 = r57335 - r57338;
        float r57340 = r57313 * r57318;
        float r57341 = r57312 - r57340;
        float r57342 = cbrt(r57328);
        float r57343 = r57342 * r57342;
        float r57344 = r57343 * r57342;
        float r57345 = r57341 + r57344;
        float r57346 = r57331 ? r57339 : r57345;
        float r57347 = r57304 ? r57329 : r57346;
        return r57347;
}

double f_od(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        double r57348 = x;
        double r57349 = -4.335731413434198e-76;
        bool r57350 = r57348 <= r57349;
        double r57351 = y;
        double r57352 = z;
        double r57353 = r57351 * r57352;
        double r57354 = t;
        double r57355 = a;
        double r57356 = r57354 * r57355;
        double r57357 = r57353 - r57356;
        double r57358 = r57348 * r57357;
        double r57359 = b;
        double r57360 = c;
        double r57361 = r57360 * r57352;
        double r57362 = i;
        double r57363 = r57354 * r57362;
        double r57364 = r57361 - r57363;
        double r57365 = cbrt(r57364);
        double r57366 = r57365 * r57365;
        double r57367 = r57359 * r57366;
        double r57368 = r57367 * r57365;
        double r57369 = r57358 - r57368;
        double r57370 = j;
        double r57371 = r57360 * r57355;
        double r57372 = r57351 * r57362;
        double r57373 = r57371 - r57372;
        double r57374 = r57370 * r57373;
        double r57375 = r57369 + r57374;
        double r57376 = 6.915320746710514e-242;
        bool r57377 = r57348 <= r57376;
        double r57378 = r57359 * r57362;
        double r57379 = r57348 * r57355;
        double r57380 = r57378 - r57379;
        double r57381 = r57380 * r57354;
        double r57382 = r57359 * r57360;
        double r57383 = r57382 * r57352;
        double r57384 = r57383 - r57374;
        double r57385 = r57381 - r57384;
        double r57386 = r57359 * r57364;
        double r57387 = r57358 - r57386;
        double r57388 = cbrt(r57374);
        double r57389 = r57388 * r57388;
        double r57390 = r57389 * r57388;
        double r57391 = r57387 + r57390;
        double r57392 = r57377 ? r57385 : r57391;
        double r57393 = r57350 ? r57375 : r57392;
        return r57393;
}

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 r57394, r57395, r57396, r57397, r57398, r57399, r57400, r57401, r57402, r57403, r57404, r57405, r57406, r57407, r57408, r57409, r57410, r57411, r57412, r57413, r57414, r57415, r57416;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r57394);
        mpfr_init(r57395);
        mpfr_init(r57396);
        mpfr_init(r57397);
        mpfr_init(r57398);
        mpfr_init(r57399);
        mpfr_init(r57400);
        mpfr_init(r57401);
        mpfr_init(r57402);
        mpfr_init(r57403);
        mpfr_init(r57404);
        mpfr_init(r57405);
        mpfr_init(r57406);
        mpfr_init(r57407);
        mpfr_init(r57408);
        mpfr_init(r57409);
        mpfr_init(r57410);
        mpfr_init(r57411);
        mpfr_init(r57412);
        mpfr_init(r57413);
        mpfr_init(r57414);
        mpfr_init(r57415);
        mpfr_init(r57416);
}

double f_im(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        mpfr_set_d(r57394, x, MPFR_RNDN);
        mpfr_set_d(r57395, y, MPFR_RNDN);
        mpfr_set_d(r57396, z, MPFR_RNDN);
        mpfr_mul(r57397, r57395, r57396, MPFR_RNDN);
        mpfr_set_d(r57398, t, MPFR_RNDN);
        mpfr_set_d(r57399, a, MPFR_RNDN);
        mpfr_mul(r57400, r57398, r57399, MPFR_RNDN);
        mpfr_sub(r57401, r57397, r57400, MPFR_RNDN);
        mpfr_mul(r57402, r57394, r57401, MPFR_RNDN);
        mpfr_set_d(r57403, b, MPFR_RNDN);
        mpfr_set_d(r57404, c, MPFR_RNDN);
        mpfr_mul(r57405, r57404, r57396, MPFR_RNDN);
        mpfr_set_d(r57406, i, MPFR_RNDN);
        mpfr_mul(r57407, r57398, r57406, MPFR_RNDN);
        mpfr_sub(r57408, r57405, r57407, MPFR_RNDN);
        mpfr_mul(r57409, r57403, r57408, MPFR_RNDN);
        mpfr_sub(r57410, r57402, r57409, MPFR_RNDN);
        mpfr_set_d(r57411, j, MPFR_RNDN);
        mpfr_mul(r57412, r57404, r57399, MPFR_RNDN);
        mpfr_mul(r57413, r57395, r57406, MPFR_RNDN);
        mpfr_sub(r57414, r57412, r57413, MPFR_RNDN);
        mpfr_mul(r57415, r57411, r57414, MPFR_RNDN);
        mpfr_add(r57416, r57410, r57415, MPFR_RNDN);
        return mpfr_get_d(r57416, MPFR_RNDN);
}

static mpfr_t r57417, r57418, r57419, r57420, r57421, r57422, r57423, r57424, r57425, r57426, r57427, r57428, r57429, r57430, r57431, r57432, r57433, r57434, r57435, r57436, r57437, r57438, r57439, r57440, r57441, r57442, r57443, r57444, r57445, r57446, r57447, r57448, r57449, r57450, r57451, r57452, r57453, r57454, r57455, r57456, r57457, r57458, r57459, r57460, r57461, r57462;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57417);
        mpfr_init_set_str(r57418, "-4.335731413434198e-76", 10, MPFR_RNDN);
        mpfr_init(r57419);
        mpfr_init(r57420);
        mpfr_init(r57421);
        mpfr_init(r57422);
        mpfr_init(r57423);
        mpfr_init(r57424);
        mpfr_init(r57425);
        mpfr_init(r57426);
        mpfr_init(r57427);
        mpfr_init(r57428);
        mpfr_init(r57429);
        mpfr_init(r57430);
        mpfr_init(r57431);
        mpfr_init(r57432);
        mpfr_init(r57433);
        mpfr_init(r57434);
        mpfr_init(r57435);
        mpfr_init(r57436);
        mpfr_init(r57437);
        mpfr_init(r57438);
        mpfr_init(r57439);
        mpfr_init(r57440);
        mpfr_init(r57441);
        mpfr_init(r57442);
        mpfr_init(r57443);
        mpfr_init(r57444);
        mpfr_init_set_str(r57445, "6.915320746710514e-242", 10, MPFR_RNDN);
        mpfr_init(r57446);
        mpfr_init(r57447);
        mpfr_init(r57448);
        mpfr_init(r57449);
        mpfr_init(r57450);
        mpfr_init(r57451);
        mpfr_init(r57452);
        mpfr_init(r57453);
        mpfr_init(r57454);
        mpfr_init(r57455);
        mpfr_init(r57456);
        mpfr_init(r57457);
        mpfr_init(r57458);
        mpfr_init(r57459);
        mpfr_init(r57460);
        mpfr_init(r57461);
        mpfr_init(r57462);
}

double f_fm(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        mpfr_set_d(r57417, x, MPFR_RNDN);
        ;
        mpfr_set_si(r57419, mpfr_cmp(r57417, r57418) <= 0, MPFR_RNDN);
        mpfr_set_d(r57420, y, MPFR_RNDN);
        mpfr_set_d(r57421, z, MPFR_RNDN);
        mpfr_mul(r57422, r57420, r57421, MPFR_RNDN);
        mpfr_set_d(r57423, t, MPFR_RNDN);
        mpfr_set_d(r57424, a, MPFR_RNDN);
        mpfr_mul(r57425, r57423, r57424, MPFR_RNDN);
        mpfr_sub(r57426, r57422, r57425, MPFR_RNDN);
        mpfr_mul(r57427, r57417, r57426, MPFR_RNDN);
        mpfr_set_d(r57428, b, MPFR_RNDN);
        mpfr_set_d(r57429, c, MPFR_RNDN);
        mpfr_mul(r57430, r57429, r57421, MPFR_RNDN);
        mpfr_set_d(r57431, i, MPFR_RNDN);
        mpfr_mul(r57432, r57423, r57431, MPFR_RNDN);
        mpfr_sub(r57433, r57430, r57432, MPFR_RNDN);
        mpfr_cbrt(r57434, r57433, MPFR_RNDN);
        mpfr_mul(r57435, r57434, r57434, MPFR_RNDN);
        mpfr_mul(r57436, r57428, r57435, MPFR_RNDN);
        mpfr_mul(r57437, r57436, r57434, MPFR_RNDN);
        mpfr_sub(r57438, r57427, r57437, MPFR_RNDN);
        mpfr_set_d(r57439, j, MPFR_RNDN);
        mpfr_mul(r57440, r57429, r57424, MPFR_RNDN);
        mpfr_mul(r57441, r57420, r57431, MPFR_RNDN);
        mpfr_sub(r57442, r57440, r57441, MPFR_RNDN);
        mpfr_mul(r57443, r57439, r57442, MPFR_RNDN);
        mpfr_add(r57444, r57438, r57443, MPFR_RNDN);
        ;
        mpfr_set_si(r57446, mpfr_cmp(r57417, r57445) <= 0, MPFR_RNDN);
        mpfr_mul(r57447, r57428, r57431, MPFR_RNDN);
        mpfr_mul(r57448, r57417, r57424, MPFR_RNDN);
        mpfr_sub(r57449, r57447, r57448, MPFR_RNDN);
        mpfr_mul(r57450, r57449, r57423, MPFR_RNDN);
        mpfr_mul(r57451, r57428, r57429, MPFR_RNDN);
        mpfr_mul(r57452, r57451, r57421, MPFR_RNDN);
        mpfr_sub(r57453, r57452, r57443, MPFR_RNDN);
        mpfr_sub(r57454, r57450, r57453, MPFR_RNDN);
        mpfr_mul(r57455, r57428, r57433, MPFR_RNDN);
        mpfr_sub(r57456, r57427, r57455, MPFR_RNDN);
        mpfr_cbrt(r57457, r57443, MPFR_RNDN);
        mpfr_mul(r57458, r57457, r57457, MPFR_RNDN);
        mpfr_mul(r57459, r57458, r57457, MPFR_RNDN);
        mpfr_add(r57460, r57456, r57459, MPFR_RNDN);
        if (mpfr_get_si(r57446, MPFR_RNDN)) { mpfr_set(r57461, r57454, MPFR_RNDN); } else { mpfr_set(r57461, r57460, MPFR_RNDN); };
        if (mpfr_get_si(r57419, MPFR_RNDN)) { mpfr_set(r57462, r57444, MPFR_RNDN); } else { mpfr_set(r57462, r57461, MPFR_RNDN); };
        return mpfr_get_d(r57462, MPFR_RNDN);
}

static mpfr_t r57463, r57464, r57465, r57466, r57467, r57468, r57469, r57470, r57471, r57472, r57473, r57474, r57475, r57476, r57477, r57478, r57479, r57480, r57481, r57482, r57483, r57484, r57485, r57486, r57487, r57488, r57489, r57490, r57491, r57492, r57493, r57494, r57495, r57496, r57497, r57498, r57499, r57500, r57501, r57502, r57503, r57504, r57505, r57506, r57507, r57508;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57463);
        mpfr_init_set_str(r57464, "-4.335731413434198e-76", 10, MPFR_RNDN);
        mpfr_init(r57465);
        mpfr_init(r57466);
        mpfr_init(r57467);
        mpfr_init(r57468);
        mpfr_init(r57469);
        mpfr_init(r57470);
        mpfr_init(r57471);
        mpfr_init(r57472);
        mpfr_init(r57473);
        mpfr_init(r57474);
        mpfr_init(r57475);
        mpfr_init(r57476);
        mpfr_init(r57477);
        mpfr_init(r57478);
        mpfr_init(r57479);
        mpfr_init(r57480);
        mpfr_init(r57481);
        mpfr_init(r57482);
        mpfr_init(r57483);
        mpfr_init(r57484);
        mpfr_init(r57485);
        mpfr_init(r57486);
        mpfr_init(r57487);
        mpfr_init(r57488);
        mpfr_init(r57489);
        mpfr_init(r57490);
        mpfr_init_set_str(r57491, "6.915320746710514e-242", 10, MPFR_RNDN);
        mpfr_init(r57492);
        mpfr_init(r57493);
        mpfr_init(r57494);
        mpfr_init(r57495);
        mpfr_init(r57496);
        mpfr_init(r57497);
        mpfr_init(r57498);
        mpfr_init(r57499);
        mpfr_init(r57500);
        mpfr_init(r57501);
        mpfr_init(r57502);
        mpfr_init(r57503);
        mpfr_init(r57504);
        mpfr_init(r57505);
        mpfr_init(r57506);
        mpfr_init(r57507);
        mpfr_init(r57508);
}

double f_dm(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        mpfr_set_d(r57463, x, MPFR_RNDN);
        ;
        mpfr_set_si(r57465, mpfr_cmp(r57463, r57464) <= 0, MPFR_RNDN);
        mpfr_set_d(r57466, y, MPFR_RNDN);
        mpfr_set_d(r57467, z, MPFR_RNDN);
        mpfr_mul(r57468, r57466, r57467, MPFR_RNDN);
        mpfr_set_d(r57469, t, MPFR_RNDN);
        mpfr_set_d(r57470, a, MPFR_RNDN);
        mpfr_mul(r57471, r57469, r57470, MPFR_RNDN);
        mpfr_sub(r57472, r57468, r57471, MPFR_RNDN);
        mpfr_mul(r57473, r57463, r57472, MPFR_RNDN);
        mpfr_set_d(r57474, b, MPFR_RNDN);
        mpfr_set_d(r57475, c, MPFR_RNDN);
        mpfr_mul(r57476, r57475, r57467, MPFR_RNDN);
        mpfr_set_d(r57477, i, MPFR_RNDN);
        mpfr_mul(r57478, r57469, r57477, MPFR_RNDN);
        mpfr_sub(r57479, r57476, r57478, MPFR_RNDN);
        mpfr_cbrt(r57480, r57479, MPFR_RNDN);
        mpfr_mul(r57481, r57480, r57480, MPFR_RNDN);
        mpfr_mul(r57482, r57474, r57481, MPFR_RNDN);
        mpfr_mul(r57483, r57482, r57480, MPFR_RNDN);
        mpfr_sub(r57484, r57473, r57483, MPFR_RNDN);
        mpfr_set_d(r57485, j, MPFR_RNDN);
        mpfr_mul(r57486, r57475, r57470, MPFR_RNDN);
        mpfr_mul(r57487, r57466, r57477, MPFR_RNDN);
        mpfr_sub(r57488, r57486, r57487, MPFR_RNDN);
        mpfr_mul(r57489, r57485, r57488, MPFR_RNDN);
        mpfr_add(r57490, r57484, r57489, MPFR_RNDN);
        ;
        mpfr_set_si(r57492, mpfr_cmp(r57463, r57491) <= 0, MPFR_RNDN);
        mpfr_mul(r57493, r57474, r57477, MPFR_RNDN);
        mpfr_mul(r57494, r57463, r57470, MPFR_RNDN);
        mpfr_sub(r57495, r57493, r57494, MPFR_RNDN);
        mpfr_mul(r57496, r57495, r57469, MPFR_RNDN);
        mpfr_mul(r57497, r57474, r57475, MPFR_RNDN);
        mpfr_mul(r57498, r57497, r57467, MPFR_RNDN);
        mpfr_sub(r57499, r57498, r57489, MPFR_RNDN);
        mpfr_sub(r57500, r57496, r57499, MPFR_RNDN);
        mpfr_mul(r57501, r57474, r57479, MPFR_RNDN);
        mpfr_sub(r57502, r57473, r57501, MPFR_RNDN);
        mpfr_cbrt(r57503, r57489, MPFR_RNDN);
        mpfr_mul(r57504, r57503, r57503, MPFR_RNDN);
        mpfr_mul(r57505, r57504, r57503, MPFR_RNDN);
        mpfr_add(r57506, r57502, r57505, MPFR_RNDN);
        if (mpfr_get_si(r57492, MPFR_RNDN)) { mpfr_set(r57507, r57500, MPFR_RNDN); } else { mpfr_set(r57507, r57506, MPFR_RNDN); };
        if (mpfr_get_si(r57465, MPFR_RNDN)) { mpfr_set(r57508, r57490, MPFR_RNDN); } else { mpfr_set(r57508, r57507, MPFR_RNDN); };
        return mpfr_get_d(r57508, MPFR_RNDN);
}

