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

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

double f_if(float x, float y, float z, float t, float a) {
        float r57037 = x;
        float r57038 = y;
        float r57039 = r57037 * r57038;
        float r57040 = z;
        float r57041 = t;
        float r57042 = r57040 * r57041;
        float r57043 = r57039 - r57042;
        float r57044 = a;
        float r57045 = r57043 / r57044;
        return r57045;
}

double f_id(double x, double y, double z, double t, double a) {
        double r57046 = x;
        double r57047 = y;
        double r57048 = r57046 * r57047;
        double r57049 = z;
        double r57050 = t;
        double r57051 = r57049 * r57050;
        double r57052 = r57048 - r57051;
        double r57053 = a;
        double r57054 = r57052 / r57053;
        return r57054;
}


double f_of(float x, float y, float z, float t, float a) {
        float r57055 = x;
        float r57056 = y;
        float r57057 = r57055 * r57056;
        float r57058 = z;
        float r57059 = t;
        float r57060 = r57058 * r57059;
        float r57061 = r57057 - r57060;
        float r57062 = 1;
        float r57063 = a;
        float r57064 = r57062 / r57063;
        float r57065 = r57061 * r57064;
        return r57065;
}

double f_od(double x, double y, double z, double t, double a) {
        double r57066 = x;
        double r57067 = y;
        double r57068 = r57066 * r57067;
        double r57069 = z;
        double r57070 = t;
        double r57071 = r57069 * r57070;
        double r57072 = r57068 - r57071;
        double r57073 = 1;
        double r57074 = a;
        double r57075 = r57073 / r57074;
        double r57076 = r57072 * r57075;
        return r57076;
}

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 r57077, r57078, r57079, r57080, r57081, r57082, r57083, r57084, r57085;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r57077);
        mpfr_init(r57078);
        mpfr_init(r57079);
        mpfr_init(r57080);
        mpfr_init(r57081);
        mpfr_init(r57082);
        mpfr_init(r57083);
        mpfr_init(r57084);
        mpfr_init(r57085);
}

double f_im(double x, double y, double z, double t, double a) {
        mpfr_set_d(r57077, x, MPFR_RNDN);
        mpfr_set_d(r57078, y, MPFR_RNDN);
        mpfr_mul(r57079, r57077, r57078, MPFR_RNDN);
        mpfr_set_d(r57080, z, MPFR_RNDN);
        mpfr_set_d(r57081, t, MPFR_RNDN);
        mpfr_mul(r57082, r57080, r57081, MPFR_RNDN);
        mpfr_sub(r57083, r57079, r57082, MPFR_RNDN);
        mpfr_set_d(r57084, a, MPFR_RNDN);
        mpfr_div(r57085, r57083, r57084, MPFR_RNDN);
        return mpfr_get_d(r57085, MPFR_RNDN);
}

static mpfr_t r57086, r57087, r57088, r57089, r57090, r57091, r57092, r57093, r57094, r57095, r57096;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57086);
        mpfr_init(r57087);
        mpfr_init(r57088);
        mpfr_init(r57089);
        mpfr_init(r57090);
        mpfr_init(r57091);
        mpfr_init(r57092);
        mpfr_init_set_str(r57093, "1", 10, MPFR_RNDN);
        mpfr_init(r57094);
        mpfr_init(r57095);
        mpfr_init(r57096);
}

double f_fm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r57086, x, MPFR_RNDN);
        mpfr_set_d(r57087, y, MPFR_RNDN);
        mpfr_mul(r57088, r57086, r57087, MPFR_RNDN);
        mpfr_set_d(r57089, z, MPFR_RNDN);
        mpfr_set_d(r57090, t, MPFR_RNDN);
        mpfr_mul(r57091, r57089, r57090, MPFR_RNDN);
        mpfr_sub(r57092, r57088, r57091, MPFR_RNDN);
        ;
        mpfr_set_d(r57094, a, MPFR_RNDN);
        mpfr_div(r57095, r57093, r57094, MPFR_RNDN);
        mpfr_mul(r57096, r57092, r57095, MPFR_RNDN);
        return mpfr_get_d(r57096, MPFR_RNDN);
}

static mpfr_t r57097, r57098, r57099, r57100, r57101, r57102, r57103, r57104, r57105, r57106, r57107;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57097);
        mpfr_init(r57098);
        mpfr_init(r57099);
        mpfr_init(r57100);
        mpfr_init(r57101);
        mpfr_init(r57102);
        mpfr_init(r57103);
        mpfr_init_set_str(r57104, "1", 10, MPFR_RNDN);
        mpfr_init(r57105);
        mpfr_init(r57106);
        mpfr_init(r57107);
}

double f_dm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r57097, x, MPFR_RNDN);
        mpfr_set_d(r57098, y, MPFR_RNDN);
        mpfr_mul(r57099, r57097, r57098, MPFR_RNDN);
        mpfr_set_d(r57100, z, MPFR_RNDN);
        mpfr_set_d(r57101, t, MPFR_RNDN);
        mpfr_mul(r57102, r57100, r57101, MPFR_RNDN);
        mpfr_sub(r57103, r57099, r57102, MPFR_RNDN);
        ;
        mpfr_set_d(r57105, a, MPFR_RNDN);
        mpfr_div(r57106, r57104, r57105, MPFR_RNDN);
        mpfr_mul(r57107, r57103, r57106, MPFR_RNDN);
        return mpfr_get_d(r57107, MPFR_RNDN);
}

