#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 r55788 = x;
        float r55789 = y;
        float r55790 = r55788 * r55789;
        float r55791 = z;
        float r55792 = t;
        float r55793 = r55791 * r55792;
        float r55794 = r55790 - r55793;
        float r55795 = a;
        float r55796 = r55794 / r55795;
        return r55796;
}

double f_id(double x, double y, double z, double t, double a) {
        double r55797 = x;
        double r55798 = y;
        double r55799 = r55797 * r55798;
        double r55800 = z;
        double r55801 = t;
        double r55802 = r55800 * r55801;
        double r55803 = r55799 - r55802;
        double r55804 = a;
        double r55805 = r55803 / r55804;
        return r55805;
}


double f_of(float x, float y, float z, float t, float a) {
        float r55806 = x;
        float r55807 = y;
        float r55808 = r55806 * r55807;
        float r55809 = z;
        float r55810 = t;
        float r55811 = r55809 * r55810;
        float r55812 = r55808 - r55811;
        float r55813 = -6.7291158904237084e+66;
        bool r55814 = r55812 <= r55813;
        float r55815 = r55807 * r55806;
        float r55816 = a;
        float r55817 = r55815 / r55816;
        float r55818 = r55816 / r55810;
        float r55819 = r55809 / r55818;
        float r55820 = r55817 - r55819;
        float r55821 = 1;
        float r55822 = r55821 / r55816;
        float r55823 = r55812 * r55822;
        float r55824 = r55814 ? r55820 : r55823;
        return r55824;
}

double f_od(double x, double y, double z, double t, double a) {
        double r55825 = x;
        double r55826 = y;
        double r55827 = r55825 * r55826;
        double r55828 = z;
        double r55829 = t;
        double r55830 = r55828 * r55829;
        double r55831 = r55827 - r55830;
        double r55832 = -6.7291158904237084e+66;
        bool r55833 = r55831 <= r55832;
        double r55834 = r55826 * r55825;
        double r55835 = a;
        double r55836 = r55834 / r55835;
        double r55837 = r55835 / r55829;
        double r55838 = r55828 / r55837;
        double r55839 = r55836 - r55838;
        double r55840 = 1;
        double r55841 = r55840 / r55835;
        double r55842 = r55831 * r55841;
        double r55843 = r55833 ? r55839 : r55842;
        return r55843;
}

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 r55844, r55845, r55846, r55847, r55848, r55849, r55850, r55851, r55852;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r55844);
        mpfr_init(r55845);
        mpfr_init(r55846);
        mpfr_init(r55847);
        mpfr_init(r55848);
        mpfr_init(r55849);
        mpfr_init(r55850);
        mpfr_init(r55851);
        mpfr_init(r55852);
}

double f_im(double x, double y, double z, double t, double a) {
        mpfr_set_d(r55844, x, MPFR_RNDN);
        mpfr_set_d(r55845, y, MPFR_RNDN);
        mpfr_mul(r55846, r55844, r55845, MPFR_RNDN);
        mpfr_set_d(r55847, z, MPFR_RNDN);
        mpfr_set_d(r55848, t, MPFR_RNDN);
        mpfr_mul(r55849, r55847, r55848, MPFR_RNDN);
        mpfr_sub(r55850, r55846, r55849, MPFR_RNDN);
        mpfr_set_d(r55851, a, MPFR_RNDN);
        mpfr_div(r55852, r55850, r55851, MPFR_RNDN);
        return mpfr_get_d(r55852, MPFR_RNDN);
}

static mpfr_t r55853, r55854, r55855, r55856, r55857, r55858, r55859, r55860, r55861, r55862, r55863, r55864, r55865, r55866, r55867, r55868, r55869, r55870, r55871;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r55853);
        mpfr_init(r55854);
        mpfr_init(r55855);
        mpfr_init(r55856);
        mpfr_init(r55857);
        mpfr_init(r55858);
        mpfr_init(r55859);
        mpfr_init_set_str(r55860, "-6.7291158904237084e+66", 10, MPFR_RNDN);
        mpfr_init(r55861);
        mpfr_init(r55862);
        mpfr_init(r55863);
        mpfr_init(r55864);
        mpfr_init(r55865);
        mpfr_init(r55866);
        mpfr_init(r55867);
        mpfr_init_set_str(r55868, "1", 10, MPFR_RNDN);
        mpfr_init(r55869);
        mpfr_init(r55870);
        mpfr_init(r55871);
}

double f_fm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r55853, x, MPFR_RNDN);
        mpfr_set_d(r55854, y, MPFR_RNDN);
        mpfr_mul(r55855, r55853, r55854, MPFR_RNDN);
        mpfr_set_d(r55856, z, MPFR_RNDN);
        mpfr_set_d(r55857, t, MPFR_RNDN);
        mpfr_mul(r55858, r55856, r55857, MPFR_RNDN);
        mpfr_sub(r55859, r55855, r55858, MPFR_RNDN);
        ;
        mpfr_set_si(r55861, mpfr_cmp(r55859, r55860) <= 0, MPFR_RNDN);
        mpfr_mul(r55862, r55854, r55853, MPFR_RNDN);
        mpfr_set_d(r55863, a, MPFR_RNDN);
        mpfr_div(r55864, r55862, r55863, MPFR_RNDN);
        mpfr_div(r55865, r55863, r55857, MPFR_RNDN);
        mpfr_div(r55866, r55856, r55865, MPFR_RNDN);
        mpfr_sub(r55867, r55864, r55866, MPFR_RNDN);
        ;
        mpfr_div(r55869, r55868, r55863, MPFR_RNDN);
        mpfr_mul(r55870, r55859, r55869, MPFR_RNDN);
        if (mpfr_get_si(r55861, MPFR_RNDN)) { mpfr_set(r55871, r55867, MPFR_RNDN); } else { mpfr_set(r55871, r55870, MPFR_RNDN); };
        return mpfr_get_d(r55871, MPFR_RNDN);
}

static mpfr_t r55872, r55873, r55874, r55875, r55876, r55877, r55878, r55879, r55880, r55881, r55882, r55883, r55884, r55885, r55886, r55887, r55888, r55889, r55890;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r55872);
        mpfr_init(r55873);
        mpfr_init(r55874);
        mpfr_init(r55875);
        mpfr_init(r55876);
        mpfr_init(r55877);
        mpfr_init(r55878);
        mpfr_init_set_str(r55879, "-6.7291158904237084e+66", 10, MPFR_RNDN);
        mpfr_init(r55880);
        mpfr_init(r55881);
        mpfr_init(r55882);
        mpfr_init(r55883);
        mpfr_init(r55884);
        mpfr_init(r55885);
        mpfr_init(r55886);
        mpfr_init_set_str(r55887, "1", 10, MPFR_RNDN);
        mpfr_init(r55888);
        mpfr_init(r55889);
        mpfr_init(r55890);
}

double f_dm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r55872, x, MPFR_RNDN);
        mpfr_set_d(r55873, y, MPFR_RNDN);
        mpfr_mul(r55874, r55872, r55873, MPFR_RNDN);
        mpfr_set_d(r55875, z, MPFR_RNDN);
        mpfr_set_d(r55876, t, MPFR_RNDN);
        mpfr_mul(r55877, r55875, r55876, MPFR_RNDN);
        mpfr_sub(r55878, r55874, r55877, MPFR_RNDN);
        ;
        mpfr_set_si(r55880, mpfr_cmp(r55878, r55879) <= 0, MPFR_RNDN);
        mpfr_mul(r55881, r55873, r55872, MPFR_RNDN);
        mpfr_set_d(r55882, a, MPFR_RNDN);
        mpfr_div(r55883, r55881, r55882, MPFR_RNDN);
        mpfr_div(r55884, r55882, r55876, MPFR_RNDN);
        mpfr_div(r55885, r55875, r55884, MPFR_RNDN);
        mpfr_sub(r55886, r55883, r55885, MPFR_RNDN);
        ;
        mpfr_div(r55888, r55887, r55882, MPFR_RNDN);
        mpfr_mul(r55889, r55878, r55888, MPFR_RNDN);
        if (mpfr_get_si(r55880, MPFR_RNDN)) { mpfr_set(r55890, r55886, MPFR_RNDN); } else { mpfr_set(r55890, r55889, MPFR_RNDN); };
        return mpfr_get_d(r55890, MPFR_RNDN);
}

