#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 r55082 = 1.0;
        float r55083 = x;
        float r55084 = r55082 - r55083;
        float r55085 = y;
        float r55086 = r55084 * r55085;
        float r55087 = z;
        float r55088 = r55083 * r55087;
        float r55089 = r55086 + r55088;
        return r55089;
}

double f_id(double x, double y, double z) {
        double r55090 = 1.0;
        double r55091 = x;
        double r55092 = r55090 - r55091;
        double r55093 = y;
        double r55094 = r55092 * r55093;
        double r55095 = z;
        double r55096 = r55091 * r55095;
        double r55097 = r55094 + r55096;
        return r55097;
}


double f_of(float x, float y, float z) {
        float r55098 = 1.0;
        float r55099 = x;
        float r55100 = r55098 - r55099;
        float r55101 = y;
        float r55102 = r55100 * r55101;
        float r55103 = z;
        float r55104 = r55099 * r55103;
        float r55105 = r55102 + r55104;
        return r55105;
}

double f_od(double x, double y, double z) {
        double r55106 = 1.0;
        double r55107 = x;
        double r55108 = r55106 - r55107;
        double r55109 = y;
        double r55110 = r55108 * r55109;
        double r55111 = z;
        double r55112 = r55107 * r55111;
        double r55113 = r55110 + r55112;
        return r55113;
}

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 r55114, r55115, r55116, r55117, r55118, r55119, r55120, r55121;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r55114, "1.0", 10, MPFR_RNDN);
        mpfr_init(r55115);
        mpfr_init(r55116);
        mpfr_init(r55117);
        mpfr_init(r55118);
        mpfr_init(r55119);
        mpfr_init(r55120);
        mpfr_init(r55121);
}

double f_im(double x, double y, double z) {
        ;
        mpfr_set_d(r55115, x, MPFR_RNDN);
        mpfr_sub(r55116, r55114, r55115, MPFR_RNDN);
        mpfr_set_d(r55117, y, MPFR_RNDN);
        mpfr_mul(r55118, r55116, r55117, MPFR_RNDN);
        mpfr_set_d(r55119, z, MPFR_RNDN);
        mpfr_mul(r55120, r55115, r55119, MPFR_RNDN);
        mpfr_add(r55121, r55118, r55120, MPFR_RNDN);
        return mpfr_get_d(r55121, MPFR_RNDN);
}

static mpfr_t r55122, r55123, r55124, r55125, r55126, r55127, r55128, r55129;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r55122, "1.0", 10, MPFR_RNDN);
        mpfr_init(r55123);
        mpfr_init(r55124);
        mpfr_init(r55125);
        mpfr_init(r55126);
        mpfr_init(r55127);
        mpfr_init(r55128);
        mpfr_init(r55129);
}

double f_fm(double x, double y, double z) {
        ;
        mpfr_set_d(r55123, x, MPFR_RNDN);
        mpfr_sub(r55124, r55122, r55123, MPFR_RNDN);
        mpfr_set_d(r55125, y, MPFR_RNDN);
        mpfr_mul(r55126, r55124, r55125, MPFR_RNDN);
        mpfr_set_d(r55127, z, MPFR_RNDN);
        mpfr_mul(r55128, r55123, r55127, MPFR_RNDN);
        mpfr_add(r55129, r55126, r55128, MPFR_RNDN);
        return mpfr_get_d(r55129, MPFR_RNDN);
}

static mpfr_t r55130, r55131, r55132, r55133, r55134, r55135, r55136, r55137;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r55130, "1.0", 10, MPFR_RNDN);
        mpfr_init(r55131);
        mpfr_init(r55132);
        mpfr_init(r55133);
        mpfr_init(r55134);
        mpfr_init(r55135);
        mpfr_init(r55136);
        mpfr_init(r55137);
}

double f_dm(double x, double y, double z) {
        ;
        mpfr_set_d(r55131, x, MPFR_RNDN);
        mpfr_sub(r55132, r55130, r55131, MPFR_RNDN);
        mpfr_set_d(r55133, y, MPFR_RNDN);
        mpfr_mul(r55134, r55132, r55133, MPFR_RNDN);
        mpfr_set_d(r55135, z, MPFR_RNDN);
        mpfr_mul(r55136, r55131, r55135, MPFR_RNDN);
        mpfr_add(r55137, r55134, r55136, MPFR_RNDN);
        return mpfr_get_d(r55137, MPFR_RNDN);
}

