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

char *name = "Data.Colour.RGBSpace.HSV:hsv from colour-2.3.3, J";

double f_if(float x, float y, float z) {
        float r56683 = x;
        float r56684 = 1.0;
        float r56685 = y;
        float r56686 = r56684 - r56685;
        float r56687 = z;
        float r56688 = r56686 * r56687;
        float r56689 = r56684 - r56688;
        float r56690 = r56683 * r56689;
        return r56690;
}

double f_id(double x, double y, double z) {
        double r56691 = x;
        double r56692 = 1.0;
        double r56693 = y;
        double r56694 = r56692 - r56693;
        double r56695 = z;
        double r56696 = r56694 * r56695;
        double r56697 = r56692 - r56696;
        double r56698 = r56691 * r56697;
        return r56698;
}


double f_of(float x, float y, float z) {
        float r56699 = x;
        float r56700 = 1.0;
        float r56701 = r56699 * r56700;
        float r56702 = z;
        float r56703 = r56702 * r56699;
        float r56704 = y;
        float r56705 = r56700 - r56704;
        float r56706 = r56703 * r56705;
        float r56707 = r56701 - r56706;
        return r56707;
}

double f_od(double x, double y, double z) {
        double r56708 = x;
        double r56709 = 1.0;
        double r56710 = r56708 * r56709;
        double r56711 = z;
        double r56712 = r56711 * r56708;
        double r56713 = y;
        double r56714 = r56709 - r56713;
        double r56715 = r56712 * r56714;
        double r56716 = r56710 - r56715;
        return r56716;
}

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 r56717, r56718, r56719, r56720, r56721, r56722, r56723, r56724;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r56717);
        mpfr_init_set_str(r56718, "1.0", 10, MPFR_RNDN);
        mpfr_init(r56719);
        mpfr_init(r56720);
        mpfr_init(r56721);
        mpfr_init(r56722);
        mpfr_init(r56723);
        mpfr_init(r56724);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r56717, x, MPFR_RNDN);
        ;
        mpfr_set_d(r56719, y, MPFR_RNDN);
        mpfr_sub(r56720, r56718, r56719, MPFR_RNDN);
        mpfr_set_d(r56721, z, MPFR_RNDN);
        mpfr_mul(r56722, r56720, r56721, MPFR_RNDN);
        mpfr_sub(r56723, r56718, r56722, MPFR_RNDN);
        mpfr_mul(r56724, r56717, r56723, MPFR_RNDN);
        return mpfr_get_d(r56724, MPFR_RNDN);
}

static mpfr_t r56725, r56726, r56727, r56728, r56729, r56730, r56731, r56732, r56733;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r56725);
        mpfr_init_set_str(r56726, "1.0", 10, MPFR_RNDN);
        mpfr_init(r56727);
        mpfr_init(r56728);
        mpfr_init(r56729);
        mpfr_init(r56730);
        mpfr_init(r56731);
        mpfr_init(r56732);
        mpfr_init(r56733);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r56725, x, MPFR_RNDN);
        ;
        mpfr_mul(r56727, r56725, r56726, MPFR_RNDN);
        mpfr_set_d(r56728, z, MPFR_RNDN);
        mpfr_mul(r56729, r56728, r56725, MPFR_RNDN);
        mpfr_set_d(r56730, y, MPFR_RNDN);
        mpfr_sub(r56731, r56726, r56730, MPFR_RNDN);
        mpfr_mul(r56732, r56729, r56731, MPFR_RNDN);
        mpfr_sub(r56733, r56727, r56732, MPFR_RNDN);
        return mpfr_get_d(r56733, MPFR_RNDN);
}

static mpfr_t r56734, r56735, r56736, r56737, r56738, r56739, r56740, r56741, r56742;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r56734);
        mpfr_init_set_str(r56735, "1.0", 10, MPFR_RNDN);
        mpfr_init(r56736);
        mpfr_init(r56737);
        mpfr_init(r56738);
        mpfr_init(r56739);
        mpfr_init(r56740);
        mpfr_init(r56741);
        mpfr_init(r56742);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r56734, x, MPFR_RNDN);
        ;
        mpfr_mul(r56736, r56734, r56735, MPFR_RNDN);
        mpfr_set_d(r56737, z, MPFR_RNDN);
        mpfr_mul(r56738, r56737, r56734, MPFR_RNDN);
        mpfr_set_d(r56739, y, MPFR_RNDN);
        mpfr_sub(r56740, r56735, r56739, MPFR_RNDN);
        mpfr_mul(r56741, r56738, r56740, MPFR_RNDN);
        mpfr_sub(r56742, r56736, r56741, MPFR_RNDN);
        return mpfr_get_d(r56742, MPFR_RNDN);
}

