#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 r56735 = x;
        float r56736 = 1.0;
        float r56737 = y;
        float r56738 = r56736 - r56737;
        float r56739 = z;
        float r56740 = r56738 * r56739;
        float r56741 = r56736 - r56740;
        float r56742 = r56735 * r56741;
        return r56742;
}

double f_id(double x, double y, double z) {
        double r56743 = x;
        double r56744 = 1.0;
        double r56745 = y;
        double r56746 = r56744 - r56745;
        double r56747 = z;
        double r56748 = r56746 * r56747;
        double r56749 = r56744 - r56748;
        double r56750 = r56743 * r56749;
        return r56750;
}


double f_of(float x, float y, float z) {
        float r56751 = x;
        float r56752 = 1.0;
        float r56753 = r56751 * r56752;
        float r56754 = z;
        float r56755 = r56754 * r56751;
        float r56756 = y;
        float r56757 = r56752 - r56756;
        float r56758 = r56755 * r56757;
        float r56759 = r56753 - r56758;
        return r56759;
}

double f_od(double x, double y, double z) {
        double r56760 = x;
        double r56761 = 1.0;
        double r56762 = r56760 * r56761;
        double r56763 = z;
        double r56764 = r56763 * r56760;
        double r56765 = y;
        double r56766 = r56761 - r56765;
        double r56767 = r56764 * r56766;
        double r56768 = r56762 - r56767;
        return r56768;
}

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 r56769, r56770, r56771, r56772, r56773, r56774, r56775, r56776;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r56769);
        mpfr_init_set_str(r56770, "1.0", 10, MPFR_RNDN);
        mpfr_init(r56771);
        mpfr_init(r56772);
        mpfr_init(r56773);
        mpfr_init(r56774);
        mpfr_init(r56775);
        mpfr_init(r56776);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r56769, x, MPFR_RNDN);
        ;
        mpfr_set_d(r56771, y, MPFR_RNDN);
        mpfr_sub(r56772, r56770, r56771, MPFR_RNDN);
        mpfr_set_d(r56773, z, MPFR_RNDN);
        mpfr_mul(r56774, r56772, r56773, MPFR_RNDN);
        mpfr_sub(r56775, r56770, r56774, MPFR_RNDN);
        mpfr_mul(r56776, r56769, r56775, MPFR_RNDN);
        return mpfr_get_d(r56776, MPFR_RNDN);
}

static mpfr_t r56777, r56778, r56779, r56780, r56781, r56782, r56783, r56784, r56785;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r56777);
        mpfr_init_set_str(r56778, "1.0", 10, MPFR_RNDN);
        mpfr_init(r56779);
        mpfr_init(r56780);
        mpfr_init(r56781);
        mpfr_init(r56782);
        mpfr_init(r56783);
        mpfr_init(r56784);
        mpfr_init(r56785);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r56777, x, MPFR_RNDN);
        ;
        mpfr_mul(r56779, r56777, r56778, MPFR_RNDN);
        mpfr_set_d(r56780, z, MPFR_RNDN);
        mpfr_mul(r56781, r56780, r56777, MPFR_RNDN);
        mpfr_set_d(r56782, y, MPFR_RNDN);
        mpfr_sub(r56783, r56778, r56782, MPFR_RNDN);
        mpfr_mul(r56784, r56781, r56783, MPFR_RNDN);
        mpfr_sub(r56785, r56779, r56784, MPFR_RNDN);
        return mpfr_get_d(r56785, MPFR_RNDN);
}

static mpfr_t r56786, r56787, r56788, r56789, r56790, r56791, r56792, r56793, r56794;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r56786);
        mpfr_init_set_str(r56787, "1.0", 10, MPFR_RNDN);
        mpfr_init(r56788);
        mpfr_init(r56789);
        mpfr_init(r56790);
        mpfr_init(r56791);
        mpfr_init(r56792);
        mpfr_init(r56793);
        mpfr_init(r56794);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r56786, x, MPFR_RNDN);
        ;
        mpfr_mul(r56788, r56786, r56787, MPFR_RNDN);
        mpfr_set_d(r56789, z, MPFR_RNDN);
        mpfr_mul(r56790, r56789, r56786, MPFR_RNDN);
        mpfr_set_d(r56791, y, MPFR_RNDN);
        mpfr_sub(r56792, r56787, r56791, MPFR_RNDN);
        mpfr_mul(r56793, r56790, r56792, MPFR_RNDN);
        mpfr_sub(r56794, r56788, r56793, MPFR_RNDN);
        return mpfr_get_d(r56794, MPFR_RNDN);
}

