#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 r56964 = x;
        float r56965 = y;
        float r56966 = z;
        float r56967 = r56965 * r56966;
        float r56968 = t;
        float r56969 = a;
        float r56970 = r56968 * r56969;
        float r56971 = r56967 - r56970;
        float r56972 = r56964 * r56971;
        float r56973 = b;
        float r56974 = c;
        float r56975 = r56974 * r56966;
        float r56976 = i;
        float r56977 = r56968 * r56976;
        float r56978 = r56975 - r56977;
        float r56979 = r56973 * r56978;
        float r56980 = r56972 - r56979;
        float r56981 = j;
        float r56982 = r56974 * r56969;
        float r56983 = r56965 * r56976;
        float r56984 = r56982 - r56983;
        float r56985 = r56981 * r56984;
        float r56986 = r56980 + r56985;
        return r56986;
}

double f_id(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        double r56987 = x;
        double r56988 = y;
        double r56989 = z;
        double r56990 = r56988 * r56989;
        double r56991 = t;
        double r56992 = a;
        double r56993 = r56991 * r56992;
        double r56994 = r56990 - r56993;
        double r56995 = r56987 * r56994;
        double r56996 = b;
        double r56997 = c;
        double r56998 = r56997 * r56989;
        double r56999 = i;
        double r57000 = r56991 * r56999;
        double r57001 = r56998 - r57000;
        double r57002 = r56996 * r57001;
        double r57003 = r56995 - r57002;
        double r57004 = j;
        double r57005 = r56997 * r56992;
        double r57006 = r56988 * r56999;
        double r57007 = r57005 - r57006;
        double r57008 = r57004 * r57007;
        double r57009 = r57003 + r57008;
        return r57009;
}


double f_of(float x, float y, float z, float t, float a, float b, float c, float i, float j) {
        float r57010 = x;
        float r57011 = y;
        float r57012 = z;
        float r57013 = r57011 * r57012;
        float r57014 = t;
        float r57015 = a;
        float r57016 = r57014 * r57015;
        float r57017 = r57013 - r57016;
        float r57018 = r57010 * r57017;
        float r57019 = b;
        float r57020 = c;
        float r57021 = r57020 * r57012;
        float r57022 = i;
        float r57023 = r57014 * r57022;
        float r57024 = r57021 - r57023;
        float r57025 = r57019 * r57024;
        float r57026 = r57018 - r57025;
        float r57027 = j;
        float r57028 = r57020 * r57015;
        float r57029 = r57027 * r57028;
        float r57030 = r57026 + r57029;
        float r57031 = r57011 * r57022;
        float r57032 = -r57031;
        float r57033 = r57027 * r57032;
        float r57034 = r57030 + r57033;
        return r57034;
}

double f_od(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        double r57035 = x;
        double r57036 = y;
        double r57037 = z;
        double r57038 = r57036 * r57037;
        double r57039 = t;
        double r57040 = a;
        double r57041 = r57039 * r57040;
        double r57042 = r57038 - r57041;
        double r57043 = r57035 * r57042;
        double r57044 = b;
        double r57045 = c;
        double r57046 = r57045 * r57037;
        double r57047 = i;
        double r57048 = r57039 * r57047;
        double r57049 = r57046 - r57048;
        double r57050 = r57044 * r57049;
        double r57051 = r57043 - r57050;
        double r57052 = j;
        double r57053 = r57045 * r57040;
        double r57054 = r57052 * r57053;
        double r57055 = r57051 + r57054;
        double r57056 = r57036 * r57047;
        double r57057 = -r57056;
        double r57058 = r57052 * r57057;
        double r57059 = r57055 + r57058;
        return r57059;
}

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 r57060, r57061, r57062, r57063, r57064, r57065, r57066, r57067, r57068, r57069, r57070, r57071, r57072, r57073, r57074, r57075, r57076, r57077, r57078, r57079, r57080, r57081, r57082;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r57060);
        mpfr_init(r57061);
        mpfr_init(r57062);
        mpfr_init(r57063);
        mpfr_init(r57064);
        mpfr_init(r57065);
        mpfr_init(r57066);
        mpfr_init(r57067);
        mpfr_init(r57068);
        mpfr_init(r57069);
        mpfr_init(r57070);
        mpfr_init(r57071);
        mpfr_init(r57072);
        mpfr_init(r57073);
        mpfr_init(r57074);
        mpfr_init(r57075);
        mpfr_init(r57076);
        mpfr_init(r57077);
        mpfr_init(r57078);
        mpfr_init(r57079);
        mpfr_init(r57080);
        mpfr_init(r57081);
        mpfr_init(r57082);
}

double f_im(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        mpfr_set_d(r57060, x, MPFR_RNDN);
        mpfr_set_d(r57061, y, MPFR_RNDN);
        mpfr_set_d(r57062, z, MPFR_RNDN);
        mpfr_mul(r57063, r57061, r57062, MPFR_RNDN);
        mpfr_set_d(r57064, t, MPFR_RNDN);
        mpfr_set_d(r57065, a, MPFR_RNDN);
        mpfr_mul(r57066, r57064, r57065, MPFR_RNDN);
        mpfr_sub(r57067, r57063, r57066, MPFR_RNDN);
        mpfr_mul(r57068, r57060, r57067, MPFR_RNDN);
        mpfr_set_d(r57069, b, MPFR_RNDN);
        mpfr_set_d(r57070, c, MPFR_RNDN);
        mpfr_mul(r57071, r57070, r57062, MPFR_RNDN);
        mpfr_set_d(r57072, i, MPFR_RNDN);
        mpfr_mul(r57073, r57064, r57072, MPFR_RNDN);
        mpfr_sub(r57074, r57071, r57073, MPFR_RNDN);
        mpfr_mul(r57075, r57069, r57074, MPFR_RNDN);
        mpfr_sub(r57076, r57068, r57075, MPFR_RNDN);
        mpfr_set_d(r57077, j, MPFR_RNDN);
        mpfr_mul(r57078, r57070, r57065, MPFR_RNDN);
        mpfr_mul(r57079, r57061, r57072, MPFR_RNDN);
        mpfr_sub(r57080, r57078, r57079, MPFR_RNDN);
        mpfr_mul(r57081, r57077, r57080, MPFR_RNDN);
        mpfr_add(r57082, r57076, r57081, MPFR_RNDN);
        return mpfr_get_d(r57082, MPFR_RNDN);
}

static mpfr_t r57083, r57084, r57085, r57086, r57087, r57088, r57089, r57090, r57091, r57092, r57093, r57094, r57095, r57096, r57097, r57098, r57099, r57100, r57101, r57102, r57103, r57104, r57105, r57106, r57107;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57083);
        mpfr_init(r57084);
        mpfr_init(r57085);
        mpfr_init(r57086);
        mpfr_init(r57087);
        mpfr_init(r57088);
        mpfr_init(r57089);
        mpfr_init(r57090);
        mpfr_init(r57091);
        mpfr_init(r57092);
        mpfr_init(r57093);
        mpfr_init(r57094);
        mpfr_init(r57095);
        mpfr_init(r57096);
        mpfr_init(r57097);
        mpfr_init(r57098);
        mpfr_init(r57099);
        mpfr_init(r57100);
        mpfr_init(r57101);
        mpfr_init(r57102);
        mpfr_init(r57103);
        mpfr_init(r57104);
        mpfr_init(r57105);
        mpfr_init(r57106);
        mpfr_init(r57107);
}

double f_fm(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        mpfr_set_d(r57083, x, MPFR_RNDN);
        mpfr_set_d(r57084, y, MPFR_RNDN);
        mpfr_set_d(r57085, z, MPFR_RNDN);
        mpfr_mul(r57086, r57084, r57085, MPFR_RNDN);
        mpfr_set_d(r57087, t, MPFR_RNDN);
        mpfr_set_d(r57088, a, MPFR_RNDN);
        mpfr_mul(r57089, r57087, r57088, MPFR_RNDN);
        mpfr_sub(r57090, r57086, r57089, MPFR_RNDN);
        mpfr_mul(r57091, r57083, r57090, MPFR_RNDN);
        mpfr_set_d(r57092, b, MPFR_RNDN);
        mpfr_set_d(r57093, c, MPFR_RNDN);
        mpfr_mul(r57094, r57093, r57085, MPFR_RNDN);
        mpfr_set_d(r57095, i, MPFR_RNDN);
        mpfr_mul(r57096, r57087, r57095, MPFR_RNDN);
        mpfr_sub(r57097, r57094, r57096, MPFR_RNDN);
        mpfr_mul(r57098, r57092, r57097, MPFR_RNDN);
        mpfr_sub(r57099, r57091, r57098, MPFR_RNDN);
        mpfr_set_d(r57100, j, MPFR_RNDN);
        mpfr_mul(r57101, r57093, r57088, MPFR_RNDN);
        mpfr_mul(r57102, r57100, r57101, MPFR_RNDN);
        mpfr_add(r57103, r57099, r57102, MPFR_RNDN);
        mpfr_mul(r57104, r57084, r57095, MPFR_RNDN);
        mpfr_neg(r57105, r57104, MPFR_RNDN);
        mpfr_mul(r57106, r57100, r57105, MPFR_RNDN);
        mpfr_add(r57107, r57103, r57106, MPFR_RNDN);
        return mpfr_get_d(r57107, MPFR_RNDN);
}

static mpfr_t r57108, r57109, r57110, r57111, r57112, r57113, r57114, r57115, r57116, r57117, r57118, r57119, r57120, r57121, r57122, r57123, r57124, r57125, r57126, r57127, r57128, r57129, r57130, r57131, r57132;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57108);
        mpfr_init(r57109);
        mpfr_init(r57110);
        mpfr_init(r57111);
        mpfr_init(r57112);
        mpfr_init(r57113);
        mpfr_init(r57114);
        mpfr_init(r57115);
        mpfr_init(r57116);
        mpfr_init(r57117);
        mpfr_init(r57118);
        mpfr_init(r57119);
        mpfr_init(r57120);
        mpfr_init(r57121);
        mpfr_init(r57122);
        mpfr_init(r57123);
        mpfr_init(r57124);
        mpfr_init(r57125);
        mpfr_init(r57126);
        mpfr_init(r57127);
        mpfr_init(r57128);
        mpfr_init(r57129);
        mpfr_init(r57130);
        mpfr_init(r57131);
        mpfr_init(r57132);
}

double f_dm(double x, double y, double z, double t, double a, double b, double c, double i, double j) {
        mpfr_set_d(r57108, x, MPFR_RNDN);
        mpfr_set_d(r57109, y, MPFR_RNDN);
        mpfr_set_d(r57110, z, MPFR_RNDN);
        mpfr_mul(r57111, r57109, r57110, MPFR_RNDN);
        mpfr_set_d(r57112, t, MPFR_RNDN);
        mpfr_set_d(r57113, a, MPFR_RNDN);
        mpfr_mul(r57114, r57112, r57113, MPFR_RNDN);
        mpfr_sub(r57115, r57111, r57114, MPFR_RNDN);
        mpfr_mul(r57116, r57108, r57115, MPFR_RNDN);
        mpfr_set_d(r57117, b, MPFR_RNDN);
        mpfr_set_d(r57118, c, MPFR_RNDN);
        mpfr_mul(r57119, r57118, r57110, MPFR_RNDN);
        mpfr_set_d(r57120, i, MPFR_RNDN);
        mpfr_mul(r57121, r57112, r57120, MPFR_RNDN);
        mpfr_sub(r57122, r57119, r57121, MPFR_RNDN);
        mpfr_mul(r57123, r57117, r57122, MPFR_RNDN);
        mpfr_sub(r57124, r57116, r57123, MPFR_RNDN);
        mpfr_set_d(r57125, j, MPFR_RNDN);
        mpfr_mul(r57126, r57118, r57113, MPFR_RNDN);
        mpfr_mul(r57127, r57125, r57126, MPFR_RNDN);
        mpfr_add(r57128, r57124, r57127, MPFR_RNDN);
        mpfr_mul(r57129, r57109, r57120, MPFR_RNDN);
        mpfr_neg(r57130, r57129, MPFR_RNDN);
        mpfr_mul(r57131, r57125, r57130, MPFR_RNDN);
        mpfr_add(r57132, r57128, r57131, MPFR_RNDN);
        return mpfr_get_d(r57132, MPFR_RNDN);
}

