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

char *name = "Data.Colour.RGB:hslsv from colour-2.3.3, D";

double f_if(float x, float y) {
        float r56077 = x;
        float r56078 = y;
        float r56079 = r56077 - r56078;
        float r56080 = r56077 + r56078;
        float r56081 = r56079 / r56080;
        return r56081;
}

double f_id(double x, double y) {
        double r56082 = x;
        double r56083 = y;
        double r56084 = r56082 - r56083;
        double r56085 = r56082 + r56083;
        double r56086 = r56084 / r56085;
        return r56086;
}


double f_of(float x, float y) {
        float r56087 = x;
        float r56088 = y;
        float r56089 = r56087 - r56088;
        float r56090 = r56087 + r56088;
        float r56091 = r56089 / r56090;
        float r56092 = r56091 * (r56091 * r56091);
        float r56093 = cbrt(r56092);
        return r56093;
}

double f_od(double x, double y) {
        double r56094 = x;
        double r56095 = y;
        double r56096 = r56094 - r56095;
        double r56097 = r56094 + r56095;
        double r56098 = r56096 / r56097;
        double r56099 = r56098 * (r56098 * r56098);
        double r56100 = cbrt(r56099);
        return r56100;
}

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 r56101, r56102, r56103, r56104, r56105;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r56101);
        mpfr_init(r56102);
        mpfr_init(r56103);
        mpfr_init(r56104);
        mpfr_init(r56105);
}

double f_im(double x, double y) {
        mpfr_set_d(r56101, x, MPFR_RNDN);
        mpfr_set_d(r56102, y, MPFR_RNDN);
        mpfr_sub(r56103, r56101, r56102, MPFR_RNDN);
        mpfr_add(r56104, r56101, r56102, MPFR_RNDN);
        mpfr_div(r56105, r56103, r56104, MPFR_RNDN);
        return mpfr_get_d(r56105, MPFR_RNDN);
}

static mpfr_t r56106, r56107, r56108, r56109, r56110, r56111, r56112;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r56106);
        mpfr_init(r56107);
        mpfr_init(r56108);
        mpfr_init(r56109);
        mpfr_init(r56110);
        mpfr_init(r56111);
        mpfr_init(r56112);
}

double f_fm(double x, double y) {
        mpfr_set_d(r56106, x, MPFR_RNDN);
        mpfr_set_d(r56107, y, MPFR_RNDN);
        mpfr_sub(r56108, r56106, r56107, MPFR_RNDN);
        mpfr_add(r56109, r56106, r56107, MPFR_RNDN);
        mpfr_div(r56110, r56108, r56109, MPFR_RNDN);
        mpfr_mul(r56111, r56110, r56110, MPFR_RNDN); mpfr_mul(r56111, r56111, r56110, MPFR_RNDN);
        mpfr_cbrt(r56112, r56111, MPFR_RNDN);
        return mpfr_get_d(r56112, MPFR_RNDN);
}

static mpfr_t r56113, r56114, r56115, r56116, r56117, r56118, r56119;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r56113);
        mpfr_init(r56114);
        mpfr_init(r56115);
        mpfr_init(r56116);
        mpfr_init(r56117);
        mpfr_init(r56118);
        mpfr_init(r56119);
}

double f_dm(double x, double y) {
        mpfr_set_d(r56113, x, MPFR_RNDN);
        mpfr_set_d(r56114, y, MPFR_RNDN);
        mpfr_sub(r56115, r56113, r56114, MPFR_RNDN);
        mpfr_add(r56116, r56113, r56114, MPFR_RNDN);
        mpfr_div(r56117, r56115, r56116, MPFR_RNDN);
        mpfr_mul(r56118, r56117, r56117, MPFR_RNDN); mpfr_mul(r56118, r56118, r56117, MPFR_RNDN);
        mpfr_cbrt(r56119, r56118, MPFR_RNDN);
        return mpfr_get_d(r56119, MPFR_RNDN);
}

