#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 r55070 = 1.0;
        float r55071 = x;
        float r55072 = r55070 - r55071;
        float r55073 = y;
        float r55074 = r55072 * r55073;
        float r55075 = z;
        float r55076 = r55071 * r55075;
        float r55077 = r55074 + r55076;
        return r55077;
}

double f_id(double x, double y, double z) {
        double r55078 = 1.0;
        double r55079 = x;
        double r55080 = r55078 - r55079;
        double r55081 = y;
        double r55082 = r55080 * r55081;
        double r55083 = z;
        double r55084 = r55079 * r55083;
        double r55085 = r55082 + r55084;
        return r55085;
}


double f_of(float x, float y, float z) {
        float r55086 = 1.0;
        float r55087 = x;
        float r55088 = r55086 - r55087;
        float r55089 = y;
        float r55090 = r55088 * r55089;
        float r55091 = z;
        float r55092 = r55087 * r55091;
        float r55093 = r55090 + r55092;
        return r55093;
}

double f_od(double x, double y, double z) {
        double r55094 = 1.0;
        double r55095 = x;
        double r55096 = r55094 - r55095;
        double r55097 = y;
        double r55098 = r55096 * r55097;
        double r55099 = z;
        double r55100 = r55095 * r55099;
        double r55101 = r55098 + r55100;
        return r55101;
}

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 r55102, r55103, r55104, r55105, r55106, r55107, r55108, r55109;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r55102, "1.0", 10, MPFR_RNDN);
        mpfr_init(r55103);
        mpfr_init(r55104);
        mpfr_init(r55105);
        mpfr_init(r55106);
        mpfr_init(r55107);
        mpfr_init(r55108);
        mpfr_init(r55109);
}

double f_im(double x, double y, double z) {
        ;
        mpfr_set_d(r55103, x, MPFR_RNDN);
        mpfr_sub(r55104, r55102, r55103, MPFR_RNDN);
        mpfr_set_d(r55105, y, MPFR_RNDN);
        mpfr_mul(r55106, r55104, r55105, MPFR_RNDN);
        mpfr_set_d(r55107, z, MPFR_RNDN);
        mpfr_mul(r55108, r55103, r55107, MPFR_RNDN);
        mpfr_add(r55109, r55106, r55108, MPFR_RNDN);
        return mpfr_get_d(r55109, MPFR_RNDN);
}

static mpfr_t r55110, r55111, r55112, r55113, r55114, r55115, r55116, r55117;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r55110, "1.0", 10, MPFR_RNDN);
        mpfr_init(r55111);
        mpfr_init(r55112);
        mpfr_init(r55113);
        mpfr_init(r55114);
        mpfr_init(r55115);
        mpfr_init(r55116);
        mpfr_init(r55117);
}

double f_fm(double x, double y, double z) {
        ;
        mpfr_set_d(r55111, x, MPFR_RNDN);
        mpfr_sub(r55112, r55110, r55111, MPFR_RNDN);
        mpfr_set_d(r55113, y, MPFR_RNDN);
        mpfr_mul(r55114, r55112, r55113, MPFR_RNDN);
        mpfr_set_d(r55115, z, MPFR_RNDN);
        mpfr_mul(r55116, r55111, r55115, MPFR_RNDN);
        mpfr_add(r55117, r55114, r55116, MPFR_RNDN);
        return mpfr_get_d(r55117, MPFR_RNDN);
}

static mpfr_t r55118, r55119, r55120, r55121, r55122, r55123, r55124, r55125;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r55118, "1.0", 10, MPFR_RNDN);
        mpfr_init(r55119);
        mpfr_init(r55120);
        mpfr_init(r55121);
        mpfr_init(r55122);
        mpfr_init(r55123);
        mpfr_init(r55124);
        mpfr_init(r55125);
}

double f_dm(double x, double y, double z) {
        ;
        mpfr_set_d(r55119, x, MPFR_RNDN);
        mpfr_sub(r55120, r55118, r55119, MPFR_RNDN);
        mpfr_set_d(r55121, y, MPFR_RNDN);
        mpfr_mul(r55122, r55120, r55121, MPFR_RNDN);
        mpfr_set_d(r55123, z, MPFR_RNDN);
        mpfr_mul(r55124, r55119, r55123, MPFR_RNDN);
        mpfr_add(r55125, r55122, r55124, MPFR_RNDN);
        return mpfr_get_d(r55125, MPFR_RNDN);
}

