#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 r57036 = x;
        float r57037 = y;
        float r57038 = z;
        float r57039 = r57037 * r57038;
        float r57040 = t;
        float r57041 = a;
        float r57042 = r57040 * r57041;
        float r57043 = r57039 - r57042;
        float r57044 = r57036 * r57043;
        float r57045 = b;
        float r57046 = c;
        float r57047 = r57046 * r57038;
        float r57048 = i;
        float r57049 = r57040 * r57048;
        float r57050 = r57047 - r57049;
        float r57051 = r57045 * r57050;
        float r57052 = r57044 - r57051;
        float r57053 = j;
        float r57054 = r57046 * r57041;
        float r57055 = r57037 * r57048;
        float r57056 = r57054 - r57055;
        float r57057 = r57053 * r57056;
        float r57058 = r57052 + r57057;
        return r57058;
}

double f_id(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        double r57059 = x;
        double r57060 = y;
        double r57061 = z;
        double r57062 = r57060 * r57061;
        double r57063 = t;
        double r57064 = a;
        double r57065 = r57063 * r57064;
        double r57066 = r57062 - r57065;
        double r57067 = r57059 * r57066;
        double r57068 = b;
        double r57069 = c;
        double r57070 = r57069 * r57061;
        double r57071 = i;
        double r57072 = r57063 * r57071;
        double r57073 = r57070 - r57072;
        double r57074 = r57068 * r57073;
        double r57075 = r57067 - r57074;
        double r57076 = j;
        double r57077 = r57069 * r57064;
        double r57078 = r57060 * r57071;
        double r57079 = r57077 - r57078;
        double r57080 = r57076 * r57079;
        double r57081 = r57075 + r57080;
        return r57081;
}


double f_of(float x, float y, float z, float t, float a, float b, float c, float i, float j) {
        float r57082 = x;
        float r57083 = y;
        float r57084 = z;
        float r57085 = r57083 * r57084;
        float r57086 = t;
        float r57087 = a;
        float r57088 = r57086 * r57087;
        float r57089 = r57085 - r57088;
        float r57090 = r57082 * r57089;
        float r57091 = b;
        float r57092 = c;
        float r57093 = r57092 * r57084;
        float r57094 = i;
        float r57095 = r57086 * r57094;
        float r57096 = r57093 - r57095;
        float r57097 = r57091 * r57096;
        float r57098 = r57090 - r57097;
        float r57099 = j;
        float r57100 = r57092 * r57087;
        float r57101 = r57099 * r57100;
        float r57102 = r57098 + r57101;
        float r57103 = r57083 * r57094;
        float r57104 = -r57103;
        float r57105 = r57099 * r57104;
        float r57106 = r57102 + r57105;
        return r57106;
}

double f_od(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        double r57107 = x;
        double r57108 = y;
        double r57109 = z;
        double r57110 = r57108 * r57109;
        double r57111 = t;
        double r57112 = a;
        double r57113 = r57111 * r57112;
        double r57114 = r57110 - r57113;
        double r57115 = r57107 * r57114;
        double r57116 = b;
        double r57117 = c;
        double r57118 = r57117 * r57109;
        double r57119 = i;
        double r57120 = r57111 * r57119;
        double r57121 = r57118 - r57120;
        double r57122 = r57116 * r57121;
        double r57123 = r57115 - r57122;
        double r57124 = j;
        double r57125 = r57117 * r57112;
        double r57126 = r57124 * r57125;
        double r57127 = r57123 + r57126;
        double r57128 = r57108 * r57119;
        double r57129 = -r57128;
        double r57130 = r57124 * r57129;
        double r57131 = r57127 + r57130;
        return r57131;
}

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 r57132, r57133, r57134, r57135, r57136, r57137, r57138, r57139, r57140, r57141, r57142, r57143, r57144, r57145, r57146, r57147, r57148, r57149, r57150, r57151, r57152, r57153, r57154;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r57132);
        mpfr_init(r57133);
        mpfr_init(r57134);
        mpfr_init(r57135);
        mpfr_init(r57136);
        mpfr_init(r57137);
        mpfr_init(r57138);
        mpfr_init(r57139);
        mpfr_init(r57140);
        mpfr_init(r57141);
        mpfr_init(r57142);
        mpfr_init(r57143);
        mpfr_init(r57144);
        mpfr_init(r57145);
        mpfr_init(r57146);
        mpfr_init(r57147);
        mpfr_init(r57148);
        mpfr_init(r57149);
        mpfr_init(r57150);
        mpfr_init(r57151);
        mpfr_init(r57152);
        mpfr_init(r57153);
        mpfr_init(r57154);
}

double f_im(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        mpfr_set_d(r57132, x, MPFR_RNDN);
        mpfr_set_d(r57133, y, MPFR_RNDN);
        mpfr_set_d(r57134, z, MPFR_RNDN);
        mpfr_mul(r57135, r57133, r57134, MPFR_RNDN);
        mpfr_set_d(r57136, t, MPFR_RNDN);
        mpfr_set_d(r57137, a, MPFR_RNDN);
        mpfr_mul(r57138, r57136, r57137, MPFR_RNDN);
        mpfr_sub(r57139, r57135, r57138, MPFR_RNDN);
        mpfr_mul(r57140, r57132, r57139, MPFR_RNDN);
        mpfr_set_d(r57141, b, MPFR_RNDN);
        mpfr_set_d(r57142, c, MPFR_RNDN);
        mpfr_mul(r57143, r57142, r57134, MPFR_RNDN);
        mpfr_set_d(r57144, i, MPFR_RNDN);
        mpfr_mul(r57145, r57136, r57144, MPFR_RNDN);
        mpfr_sub(r57146, r57143, r57145, MPFR_RNDN);
        mpfr_mul(r57147, r57141, r57146, MPFR_RNDN);
        mpfr_sub(r57148, r57140, r57147, MPFR_RNDN);
        mpfr_set_d(r57149, j, MPFR_RNDN);
        mpfr_mul(r57150, r57142, r57137, MPFR_RNDN);
        mpfr_mul(r57151, r57133, r57144, MPFR_RNDN);
        mpfr_sub(r57152, r57150, r57151, MPFR_RNDN);
        mpfr_mul(r57153, r57149, r57152, MPFR_RNDN);
        mpfr_add(r57154, r57148, r57153, MPFR_RNDN);
        return mpfr_get_d(r57154, MPFR_RNDN);
}

static mpfr_t r57155, r57156, r57157, r57158, r57159, r57160, r57161, r57162, r57163, r57164, r57165, r57166, r57167, r57168, r57169, r57170, r57171, r57172, r57173, r57174, r57175, r57176, r57177, r57178, r57179;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57155);
        mpfr_init(r57156);
        mpfr_init(r57157);
        mpfr_init(r57158);
        mpfr_init(r57159);
        mpfr_init(r57160);
        mpfr_init(r57161);
        mpfr_init(r57162);
        mpfr_init(r57163);
        mpfr_init(r57164);
        mpfr_init(r57165);
        mpfr_init(r57166);
        mpfr_init(r57167);
        mpfr_init(r57168);
        mpfr_init(r57169);
        mpfr_init(r57170);
        mpfr_init(r57171);
        mpfr_init(r57172);
        mpfr_init(r57173);
        mpfr_init(r57174);
        mpfr_init(r57175);
        mpfr_init(r57176);
        mpfr_init(r57177);
        mpfr_init(r57178);
        mpfr_init(r57179);
}

double f_fm(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        mpfr_set_d(r57155, x, MPFR_RNDN);
        mpfr_set_d(r57156, y, MPFR_RNDN);
        mpfr_set_d(r57157, z, MPFR_RNDN);
        mpfr_mul(r57158, r57156, r57157, MPFR_RNDN);
        mpfr_set_d(r57159, t, MPFR_RNDN);
        mpfr_set_d(r57160, a, MPFR_RNDN);
        mpfr_mul(r57161, r57159, r57160, MPFR_RNDN);
        mpfr_sub(r57162, r57158, r57161, MPFR_RNDN);
        mpfr_mul(r57163, r57155, r57162, MPFR_RNDN);
        mpfr_set_d(r57164, b, MPFR_RNDN);
        mpfr_set_d(r57165, c, MPFR_RNDN);
        mpfr_mul(r57166, r57165, r57157, MPFR_RNDN);
        mpfr_set_d(r57167, i, MPFR_RNDN);
        mpfr_mul(r57168, r57159, r57167, MPFR_RNDN);
        mpfr_sub(r57169, r57166, r57168, MPFR_RNDN);
        mpfr_mul(r57170, r57164, r57169, MPFR_RNDN);
        mpfr_sub(r57171, r57163, r57170, MPFR_RNDN);
        mpfr_set_d(r57172, j, MPFR_RNDN);
        mpfr_mul(r57173, r57165, r57160, MPFR_RNDN);
        mpfr_mul(r57174, r57172, r57173, MPFR_RNDN);
        mpfr_add(r57175, r57171, r57174, MPFR_RNDN);
        mpfr_mul(r57176, r57156, r57167, MPFR_RNDN);
        mpfr_neg(r57177, r57176, MPFR_RNDN);
        mpfr_mul(r57178, r57172, r57177, MPFR_RNDN);
        mpfr_add(r57179, r57175, r57178, MPFR_RNDN);
        return mpfr_get_d(r57179, MPFR_RNDN);
}

static mpfr_t r57180, r57181, r57182, r57183, r57184, r57185, r57186, r57187, r57188, r57189, r57190, r57191, r57192, r57193, r57194, r57195, r57196, r57197, r57198, r57199, r57200, r57201, r57202, r57203, r57204;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57180);
        mpfr_init(r57181);
        mpfr_init(r57182);
        mpfr_init(r57183);
        mpfr_init(r57184);
        mpfr_init(r57185);
        mpfr_init(r57186);
        mpfr_init(r57187);
        mpfr_init(r57188);
        mpfr_init(r57189);
        mpfr_init(r57190);
        mpfr_init(r57191);
        mpfr_init(r57192);
        mpfr_init(r57193);
        mpfr_init(r57194);
        mpfr_init(r57195);
        mpfr_init(r57196);
        mpfr_init(r57197);
        mpfr_init(r57198);
        mpfr_init(r57199);
        mpfr_init(r57200);
        mpfr_init(r57201);
        mpfr_init(r57202);
        mpfr_init(r57203);
        mpfr_init(r57204);
}

double f_dm(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        mpfr_set_d(r57180, x, MPFR_RNDN);
        mpfr_set_d(r57181, y, MPFR_RNDN);
        mpfr_set_d(r57182, z, MPFR_RNDN);
        mpfr_mul(r57183, r57181, r57182, MPFR_RNDN);
        mpfr_set_d(r57184, t, MPFR_RNDN);
        mpfr_set_d(r57185, a, MPFR_RNDN);
        mpfr_mul(r57186, r57184, r57185, MPFR_RNDN);
        mpfr_sub(r57187, r57183, r57186, MPFR_RNDN);
        mpfr_mul(r57188, r57180, r57187, MPFR_RNDN);
        mpfr_set_d(r57189, b, MPFR_RNDN);
        mpfr_set_d(r57190, c, MPFR_RNDN);
        mpfr_mul(r57191, r57190, r57182, MPFR_RNDN);
        mpfr_set_d(r57192, i, MPFR_RNDN);
        mpfr_mul(r57193, r57184, r57192, MPFR_RNDN);
        mpfr_sub(r57194, r57191, r57193, MPFR_RNDN);
        mpfr_mul(r57195, r57189, r57194, MPFR_RNDN);
        mpfr_sub(r57196, r57188, r57195, MPFR_RNDN);
        mpfr_set_d(r57197, j, MPFR_RNDN);
        mpfr_mul(r57198, r57190, r57185, MPFR_RNDN);
        mpfr_mul(r57199, r57197, r57198, MPFR_RNDN);
        mpfr_add(r57200, r57196, r57199, MPFR_RNDN);
        mpfr_mul(r57201, r57181, r57192, MPFR_RNDN);
        mpfr_neg(r57202, r57201, MPFR_RNDN);
        mpfr_mul(r57203, r57197, r57202, MPFR_RNDN);
        mpfr_add(r57204, r57200, r57203, MPFR_RNDN);
        return mpfr_get_d(r57204, MPFR_RNDN);
}

