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

char *name = "Diagrams.Color.HSV:lerp  from diagrams-contrib-1.3.0.5";

double f_if(float x, float y, float z) {
        float r53969 = 1.0;
        float r53970 = x;
        float r53971 = r53969 - r53970;
        float r53972 = y;
        float r53973 = r53971 * r53972;
        float r53974 = z;
        float r53975 = r53970 * r53974;
        float r53976 = r53973 + r53975;
        return r53976;
}

double f_id(double x, double y, double z) {
        double r53977 = 1.0;
        double r53978 = x;
        double r53979 = r53977 - r53978;
        double r53980 = y;
        double r53981 = r53979 * r53980;
        double r53982 = z;
        double r53983 = r53978 * r53982;
        double r53984 = r53981 + r53983;
        return r53984;
}


double f_of(float x, float y, float z) {
        float r53985 = 1.0;
        float r53986 = x;
        float r53987 = r53985 - r53986;
        float r53988 = y;
        float r53989 = r53987 * r53988;
        float r53990 = z;
        float r53991 = r53986 * r53990;
        float r53992 = r53989 + r53991;
        return r53992;
}

double f_od(double x, double y, double z) {
        double r53993 = 1.0;
        double r53994 = x;
        double r53995 = r53993 - r53994;
        double r53996 = y;
        double r53997 = r53995 * r53996;
        double r53998 = z;
        double r53999 = r53994 * r53998;
        double r54000 = r53997 + r53999;
        return r54000;
}

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 r54001, r54002, r54003, r54004, r54005, r54006, r54007, r54008;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r54001, "1.0", 10, MPFR_RNDN);
        mpfr_init(r54002);
        mpfr_init(r54003);
        mpfr_init(r54004);
        mpfr_init(r54005);
        mpfr_init(r54006);
        mpfr_init(r54007);
        mpfr_init(r54008);
}

double f_im(double x, double y, double z) {
        ;
        mpfr_set_d(r54002, x, MPFR_RNDN);
        mpfr_sub(r54003, r54001, r54002, MPFR_RNDN);
        mpfr_set_d(r54004, y, MPFR_RNDN);
        mpfr_mul(r54005, r54003, r54004, MPFR_RNDN);
        mpfr_set_d(r54006, z, MPFR_RNDN);
        mpfr_mul(r54007, r54002, r54006, MPFR_RNDN);
        mpfr_add(r54008, r54005, r54007, MPFR_RNDN);
        return mpfr_get_d(r54008, MPFR_RNDN);
}

static mpfr_t r54009, r54010, r54011, r54012, r54013, r54014, r54015, r54016;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r54009, "1.0", 10, MPFR_RNDN);
        mpfr_init(r54010);
        mpfr_init(r54011);
        mpfr_init(r54012);
        mpfr_init(r54013);
        mpfr_init(r54014);
        mpfr_init(r54015);
        mpfr_init(r54016);
}

double f_fm(double x, double y, double z) {
        ;
        mpfr_set_d(r54010, x, MPFR_RNDN);
        mpfr_sub(r54011, r54009, r54010, MPFR_RNDN);
        mpfr_set_d(r54012, y, MPFR_RNDN);
        mpfr_mul(r54013, r54011, r54012, MPFR_RNDN);
        mpfr_set_d(r54014, z, MPFR_RNDN);
        mpfr_mul(r54015, r54010, r54014, MPFR_RNDN);
        mpfr_add(r54016, r54013, r54015, MPFR_RNDN);
        return mpfr_get_d(r54016, MPFR_RNDN);
}

static mpfr_t r54017, r54018, r54019, r54020, r54021, r54022, r54023, r54024;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r54017, "1.0", 10, MPFR_RNDN);
        mpfr_init(r54018);
        mpfr_init(r54019);
        mpfr_init(r54020);
        mpfr_init(r54021);
        mpfr_init(r54022);
        mpfr_init(r54023);
        mpfr_init(r54024);
}

double f_dm(double x, double y, double z) {
        ;
        mpfr_set_d(r54018, x, MPFR_RNDN);
        mpfr_sub(r54019, r54017, r54018, MPFR_RNDN);
        mpfr_set_d(r54020, y, MPFR_RNDN);
        mpfr_mul(r54021, r54019, r54020, MPFR_RNDN);
        mpfr_set_d(r54022, z, MPFR_RNDN);
        mpfr_mul(r54023, r54018, r54022, MPFR_RNDN);
        mpfr_add(r54024, r54021, r54023, MPFR_RNDN);
        return mpfr_get_d(r54024, MPFR_RNDN);
}

