#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 r57108 = x;
        float r57109 = y;
        float r57110 = z;
        float r57111 = r57109 * r57110;
        float r57112 = t;
        float r57113 = a;
        float r57114 = r57112 * r57113;
        float r57115 = r57111 - r57114;
        float r57116 = r57108 * r57115;
        float r57117 = b;
        float r57118 = c;
        float r57119 = r57118 * r57110;
        float r57120 = i;
        float r57121 = r57112 * r57120;
        float r57122 = r57119 - r57121;
        float r57123 = r57117 * r57122;
        float r57124 = r57116 - r57123;
        float r57125 = j;
        float r57126 = r57118 * r57113;
        float r57127 = r57109 * r57120;
        float r57128 = r57126 - r57127;
        float r57129 = r57125 * r57128;
        float r57130 = r57124 + r57129;
        return r57130;
}

double f_id(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        double r57131 = x;
        double r57132 = y;
        double r57133 = z;
        double r57134 = r57132 * r57133;
        double r57135 = t;
        double r57136 = a;
        double r57137 = r57135 * r57136;
        double r57138 = r57134 - r57137;
        double r57139 = r57131 * r57138;
        double r57140 = b;
        double r57141 = c;
        double r57142 = r57141 * r57133;
        double r57143 = i;
        double r57144 = r57135 * r57143;
        double r57145 = r57142 - r57144;
        double r57146 = r57140 * r57145;
        double r57147 = r57139 - r57146;
        double r57148 = j;
        double r57149 = r57141 * r57136;
        double r57150 = r57132 * r57143;
        double r57151 = r57149 - r57150;
        double r57152 = r57148 * r57151;
        double r57153 = r57147 + r57152;
        return r57153;
}


double f_of(float x, float y, float z, float t, float a, float b, float c, float i, float j) {
        float r57154 = x;
        float r57155 = y;
        float r57156 = z;
        float r57157 = r57155 * r57156;
        float r57158 = t;
        float r57159 = a;
        float r57160 = r57158 * r57159;
        float r57161 = r57157 - r57160;
        float r57162 = r57154 * r57161;
        float r57163 = b;
        float r57164 = c;
        float r57165 = r57164 * r57156;
        float r57166 = i;
        float r57167 = r57158 * r57166;
        float r57168 = r57165 - r57167;
        float r57169 = r57163 * r57168;
        float r57170 = r57162 - r57169;
        float r57171 = j;
        float r57172 = r57164 * r57159;
        float r57173 = r57171 * r57172;
        float r57174 = r57170 + r57173;
        float r57175 = r57155 * r57166;
        float r57176 = -r57175;
        float r57177 = r57171 * r57176;
        float r57178 = r57174 + r57177;
        return r57178;
}

double f_od(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        double r57179 = x;
        double r57180 = y;
        double r57181 = z;
        double r57182 = r57180 * r57181;
        double r57183 = t;
        double r57184 = a;
        double r57185 = r57183 * r57184;
        double r57186 = r57182 - r57185;
        double r57187 = r57179 * r57186;
        double r57188 = b;
        double r57189 = c;
        double r57190 = r57189 * r57181;
        double r57191 = i;
        double r57192 = r57183 * r57191;
        double r57193 = r57190 - r57192;
        double r57194 = r57188 * r57193;
        double r57195 = r57187 - r57194;
        double r57196 = j;
        double r57197 = r57189 * r57184;
        double r57198 = r57196 * r57197;
        double r57199 = r57195 + r57198;
        double r57200 = r57180 * r57191;
        double r57201 = -r57200;
        double r57202 = r57196 * r57201;
        double r57203 = r57199 + r57202;
        return r57203;
}

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 r57204, r57205, r57206, r57207, r57208, r57209, r57210, r57211, r57212, r57213, r57214, r57215, r57216, r57217, r57218, r57219, r57220, r57221, r57222, r57223, r57224, r57225, r57226;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r57204);
        mpfr_init(r57205);
        mpfr_init(r57206);
        mpfr_init(r57207);
        mpfr_init(r57208);
        mpfr_init(r57209);
        mpfr_init(r57210);
        mpfr_init(r57211);
        mpfr_init(r57212);
        mpfr_init(r57213);
        mpfr_init(r57214);
        mpfr_init(r57215);
        mpfr_init(r57216);
        mpfr_init(r57217);
        mpfr_init(r57218);
        mpfr_init(r57219);
        mpfr_init(r57220);
        mpfr_init(r57221);
        mpfr_init(r57222);
        mpfr_init(r57223);
        mpfr_init(r57224);
        mpfr_init(r57225);
        mpfr_init(r57226);
}

double f_im(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        mpfr_set_d(r57204, x, MPFR_RNDN);
        mpfr_set_d(r57205, y, MPFR_RNDN);
        mpfr_set_d(r57206, z, MPFR_RNDN);
        mpfr_mul(r57207, r57205, r57206, MPFR_RNDN);
        mpfr_set_d(r57208, t, MPFR_RNDN);
        mpfr_set_d(r57209, a, MPFR_RNDN);
        mpfr_mul(r57210, r57208, r57209, MPFR_RNDN);
        mpfr_sub(r57211, r57207, r57210, MPFR_RNDN);
        mpfr_mul(r57212, r57204, r57211, MPFR_RNDN);
        mpfr_set_d(r57213, b, MPFR_RNDN);
        mpfr_set_d(r57214, c, MPFR_RNDN);
        mpfr_mul(r57215, r57214, r57206, MPFR_RNDN);
        mpfr_set_d(r57216, i, MPFR_RNDN);
        mpfr_mul(r57217, r57208, r57216, MPFR_RNDN);
        mpfr_sub(r57218, r57215, r57217, MPFR_RNDN);
        mpfr_mul(r57219, r57213, r57218, MPFR_RNDN);
        mpfr_sub(r57220, r57212, r57219, MPFR_RNDN);
        mpfr_set_d(r57221, j, MPFR_RNDN);
        mpfr_mul(r57222, r57214, r57209, MPFR_RNDN);
        mpfr_mul(r57223, r57205, r57216, MPFR_RNDN);
        mpfr_sub(r57224, r57222, r57223, MPFR_RNDN);
        mpfr_mul(r57225, r57221, r57224, MPFR_RNDN);
        mpfr_add(r57226, r57220, r57225, MPFR_RNDN);
        return mpfr_get_d(r57226, MPFR_RNDN);
}

static mpfr_t r57227, r57228, r57229, r57230, r57231, r57232, r57233, r57234, r57235, r57236, r57237, r57238, r57239, r57240, r57241, r57242, r57243, r57244, r57245, r57246, r57247, r57248, r57249, r57250, r57251;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57227);
        mpfr_init(r57228);
        mpfr_init(r57229);
        mpfr_init(r57230);
        mpfr_init(r57231);
        mpfr_init(r57232);
        mpfr_init(r57233);
        mpfr_init(r57234);
        mpfr_init(r57235);
        mpfr_init(r57236);
        mpfr_init(r57237);
        mpfr_init(r57238);
        mpfr_init(r57239);
        mpfr_init(r57240);
        mpfr_init(r57241);
        mpfr_init(r57242);
        mpfr_init(r57243);
        mpfr_init(r57244);
        mpfr_init(r57245);
        mpfr_init(r57246);
        mpfr_init(r57247);
        mpfr_init(r57248);
        mpfr_init(r57249);
        mpfr_init(r57250);
        mpfr_init(r57251);
}

double f_fm(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        mpfr_set_d(r57227, x, MPFR_RNDN);
        mpfr_set_d(r57228, y, MPFR_RNDN);
        mpfr_set_d(r57229, z, MPFR_RNDN);
        mpfr_mul(r57230, r57228, r57229, MPFR_RNDN);
        mpfr_set_d(r57231, t, MPFR_RNDN);
        mpfr_set_d(r57232, a, MPFR_RNDN);
        mpfr_mul(r57233, r57231, r57232, MPFR_RNDN);
        mpfr_sub(r57234, r57230, r57233, MPFR_RNDN);
        mpfr_mul(r57235, r57227, r57234, MPFR_RNDN);
        mpfr_set_d(r57236, b, MPFR_RNDN);
        mpfr_set_d(r57237, c, MPFR_RNDN);
        mpfr_mul(r57238, r57237, r57229, MPFR_RNDN);
        mpfr_set_d(r57239, i, MPFR_RNDN);
        mpfr_mul(r57240, r57231, r57239, MPFR_RNDN);
        mpfr_sub(r57241, r57238, r57240, MPFR_RNDN);
        mpfr_mul(r57242, r57236, r57241, MPFR_RNDN);
        mpfr_sub(r57243, r57235, r57242, MPFR_RNDN);
        mpfr_set_d(r57244, j, MPFR_RNDN);
        mpfr_mul(r57245, r57237, r57232, MPFR_RNDN);
        mpfr_mul(r57246, r57244, r57245, MPFR_RNDN);
        mpfr_add(r57247, r57243, r57246, MPFR_RNDN);
        mpfr_mul(r57248, r57228, r57239, MPFR_RNDN);
        mpfr_neg(r57249, r57248, MPFR_RNDN);
        mpfr_mul(r57250, r57244, r57249, MPFR_RNDN);
        mpfr_add(r57251, r57247, r57250, MPFR_RNDN);
        return mpfr_get_d(r57251, MPFR_RNDN);
}

static mpfr_t r57252, r57253, r57254, r57255, r57256, r57257, r57258, r57259, r57260, r57261, r57262, r57263, r57264, r57265, r57266, r57267, r57268, r57269, r57270, r57271, r57272, r57273, r57274, r57275, r57276;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57252);
        mpfr_init(r57253);
        mpfr_init(r57254);
        mpfr_init(r57255);
        mpfr_init(r57256);
        mpfr_init(r57257);
        mpfr_init(r57258);
        mpfr_init(r57259);
        mpfr_init(r57260);
        mpfr_init(r57261);
        mpfr_init(r57262);
        mpfr_init(r57263);
        mpfr_init(r57264);
        mpfr_init(r57265);
        mpfr_init(r57266);
        mpfr_init(r57267);
        mpfr_init(r57268);
        mpfr_init(r57269);
        mpfr_init(r57270);
        mpfr_init(r57271);
        mpfr_init(r57272);
        mpfr_init(r57273);
        mpfr_init(r57274);
        mpfr_init(r57275);
        mpfr_init(r57276);
}

double f_dm(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        mpfr_set_d(r57252, x, MPFR_RNDN);
        mpfr_set_d(r57253, y, MPFR_RNDN);
        mpfr_set_d(r57254, z, MPFR_RNDN);
        mpfr_mul(r57255, r57253, r57254, MPFR_RNDN);
        mpfr_set_d(r57256, t, MPFR_RNDN);
        mpfr_set_d(r57257, a, MPFR_RNDN);
        mpfr_mul(r57258, r57256, r57257, MPFR_RNDN);
        mpfr_sub(r57259, r57255, r57258, MPFR_RNDN);
        mpfr_mul(r57260, r57252, r57259, MPFR_RNDN);
        mpfr_set_d(r57261, b, MPFR_RNDN);
        mpfr_set_d(r57262, c, MPFR_RNDN);
        mpfr_mul(r57263, r57262, r57254, MPFR_RNDN);
        mpfr_set_d(r57264, i, MPFR_RNDN);
        mpfr_mul(r57265, r57256, r57264, MPFR_RNDN);
        mpfr_sub(r57266, r57263, r57265, MPFR_RNDN);
        mpfr_mul(r57267, r57261, r57266, MPFR_RNDN);
        mpfr_sub(r57268, r57260, r57267, MPFR_RNDN);
        mpfr_set_d(r57269, j, MPFR_RNDN);
        mpfr_mul(r57270, r57262, r57257, MPFR_RNDN);
        mpfr_mul(r57271, r57269, r57270, MPFR_RNDN);
        mpfr_add(r57272, r57268, r57271, MPFR_RNDN);
        mpfr_mul(r57273, r57253, r57264, MPFR_RNDN);
        mpfr_neg(r57274, r57273, MPFR_RNDN);
        mpfr_mul(r57275, r57269, r57274, MPFR_RNDN);
        mpfr_add(r57276, r57272, r57275, MPFR_RNDN);
        return mpfr_get_d(r57276, MPFR_RNDN);
}

