#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 r55366 = 1.0;
        float r55367 = x;
        float r55368 = r55366 - r55367;
        float r55369 = y;
        float r55370 = r55368 * r55369;
        float r55371 = z;
        float r55372 = r55367 * r55371;
        float r55373 = r55370 + r55372;
        return r55373;
}

double f_id(double x, double y, double z) {
        double r55374 = 1.0;
        double r55375 = x;
        double r55376 = r55374 - r55375;
        double r55377 = y;
        double r55378 = r55376 * r55377;
        double r55379 = z;
        double r55380 = r55375 * r55379;
        double r55381 = r55378 + r55380;
        return r55381;
}


double f_of(float x, float y, float z) {
        float r55382 = 1.0;
        float r55383 = x;
        float r55384 = r55382 - r55383;
        float r55385 = y;
        float r55386 = r55384 * r55385;
        float r55387 = z;
        float r55388 = r55383 * r55387;
        float r55389 = r55386 + r55388;
        return r55389;
}

double f_od(double x, double y, double z) {
        double r55390 = 1.0;
        double r55391 = x;
        double r55392 = r55390 - r55391;
        double r55393 = y;
        double r55394 = r55392 * r55393;
        double r55395 = z;
        double r55396 = r55391 * r55395;
        double r55397 = r55394 + r55396;
        return r55397;
}

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 r55398, r55399, r55400, r55401, r55402, r55403, r55404, r55405;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r55398, "1.0", 10, MPFR_RNDN);
        mpfr_init(r55399);
        mpfr_init(r55400);
        mpfr_init(r55401);
        mpfr_init(r55402);
        mpfr_init(r55403);
        mpfr_init(r55404);
        mpfr_init(r55405);
}

double f_im(double x, double y, double z) {
        ;
        mpfr_set_d(r55399, x, MPFR_RNDN);
        mpfr_sub(r55400, r55398, r55399, MPFR_RNDN);
        mpfr_set_d(r55401, y, MPFR_RNDN);
        mpfr_mul(r55402, r55400, r55401, MPFR_RNDN);
        mpfr_set_d(r55403, z, MPFR_RNDN);
        mpfr_mul(r55404, r55399, r55403, MPFR_RNDN);
        mpfr_add(r55405, r55402, r55404, MPFR_RNDN);
        return mpfr_get_d(r55405, MPFR_RNDN);
}

static mpfr_t r55406, r55407, r55408, r55409, r55410, r55411, r55412, r55413;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r55406, "1.0", 10, MPFR_RNDN);
        mpfr_init(r55407);
        mpfr_init(r55408);
        mpfr_init(r55409);
        mpfr_init(r55410);
        mpfr_init(r55411);
        mpfr_init(r55412);
        mpfr_init(r55413);
}

double f_fm(double x, double y, double z) {
        ;
        mpfr_set_d(r55407, x, MPFR_RNDN);
        mpfr_sub(r55408, r55406, r55407, MPFR_RNDN);
        mpfr_set_d(r55409, y, MPFR_RNDN);
        mpfr_mul(r55410, r55408, r55409, MPFR_RNDN);
        mpfr_set_d(r55411, z, MPFR_RNDN);
        mpfr_mul(r55412, r55407, r55411, MPFR_RNDN);
        mpfr_add(r55413, r55410, r55412, MPFR_RNDN);
        return mpfr_get_d(r55413, MPFR_RNDN);
}

static mpfr_t r55414, r55415, r55416, r55417, r55418, r55419, r55420, r55421;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r55414, "1.0", 10, MPFR_RNDN);
        mpfr_init(r55415);
        mpfr_init(r55416);
        mpfr_init(r55417);
        mpfr_init(r55418);
        mpfr_init(r55419);
        mpfr_init(r55420);
        mpfr_init(r55421);
}

double f_dm(double x, double y, double z) {
        ;
        mpfr_set_d(r55415, x, MPFR_RNDN);
        mpfr_sub(r55416, r55414, r55415, MPFR_RNDN);
        mpfr_set_d(r55417, y, MPFR_RNDN);
        mpfr_mul(r55418, r55416, r55417, MPFR_RNDN);
        mpfr_set_d(r55419, z, MPFR_RNDN);
        mpfr_mul(r55420, r55415, r55419, MPFR_RNDN);
        mpfr_add(r55421, r55418, r55420, MPFR_RNDN);
        return mpfr_get_d(r55421, MPFR_RNDN);
}

