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

char *name = "Data.Array.Repa.Algorithms.ColorRamp:rampColorHotToCold from repa-algorithms-3.4.0.1, A";

double f_if(float x, float y, float z) {
        float r56394 = 1.0;
        float r56395 = 4.0;
        float r56396 = x;
        float r56397 = y;
        float r56398 = 0.75;
        float r56399 = r56397 * r56398;
        float r56400 = r56396 + r56399;
        float r56401 = z;
        float r56402 = r56400 - r56401;
        float r56403 = r56395 * r56402;
        float r56404 = r56403 / r56397;
        float r56405 = r56394 + r56404;
        return r56405;
}

double f_id(double x, double y, double z) {
        double r56406 = 1.0;
        double r56407 = 4.0;
        double r56408 = x;
        double r56409 = y;
        double r56410 = 0.75;
        double r56411 = r56409 * r56410;
        double r56412 = r56408 + r56411;
        double r56413 = z;
        double r56414 = r56412 - r56413;
        double r56415 = r56407 * r56414;
        double r56416 = r56415 / r56409;
        double r56417 = r56406 + r56416;
        return r56417;
}


double f_of(float x, float y, float z) {
        float r56418 = 1.0;
        float r56419 = 3.0;
        float r56420 = r56418 + r56419;
        float r56421 = z;
        float r56422 = y;
        float r56423 = r56421 / r56422;
        float r56424 = x;
        float r56425 = r56424 / r56422;
        float r56426 = r56423 - r56425;
        float r56427 = 4.0;
        float r56428 = r56426 * r56427;
        float r56429 = r56420 - r56428;
        return r56429;
}

double f_od(double x, double y, double z) {
        double r56430 = 1.0;
        double r56431 = 3.0;
        double r56432 = r56430 + r56431;
        double r56433 = z;
        double r56434 = y;
        double r56435 = r56433 / r56434;
        double r56436 = x;
        double r56437 = r56436 / r56434;
        double r56438 = r56435 - r56437;
        double r56439 = 4.0;
        double r56440 = r56438 * r56439;
        double r56441 = r56432 - r56440;
        return r56441;
}

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 r56442, r56443, r56444, r56445, r56446, r56447, r56448, r56449, r56450, r56451, r56452, r56453;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r56442, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r56443, "4.0", 10, MPFR_RNDN);
        mpfr_init(r56444);
        mpfr_init(r56445);
        mpfr_init_set_str(r56446, "0.75", 10, MPFR_RNDN);
        mpfr_init(r56447);
        mpfr_init(r56448);
        mpfr_init(r56449);
        mpfr_init(r56450);
        mpfr_init(r56451);
        mpfr_init(r56452);
        mpfr_init(r56453);
}

double f_im(double x, double y, double z) {
        ;
        ;
        mpfr_set_d(r56444, x, MPFR_RNDN);
        mpfr_set_d(r56445, y, MPFR_RNDN);
        ;
        mpfr_mul(r56447, r56445, r56446, MPFR_RNDN);
        mpfr_add(r56448, r56444, r56447, MPFR_RNDN);
        mpfr_set_d(r56449, z, MPFR_RNDN);
        mpfr_sub(r56450, r56448, r56449, MPFR_RNDN);
        mpfr_mul(r56451, r56443, r56450, MPFR_RNDN);
        mpfr_div(r56452, r56451, r56445, MPFR_RNDN);
        mpfr_add(r56453, r56442, r56452, MPFR_RNDN);
        return mpfr_get_d(r56453, MPFR_RNDN);
}

static mpfr_t r56454, r56455, r56456, r56457, r56458, r56459, r56460, r56461, r56462, r56463, r56464, r56465;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r56454, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r56455, "3.0", 10, MPFR_RNDN);
        mpfr_init(r56456);
        mpfr_init(r56457);
        mpfr_init(r56458);
        mpfr_init(r56459);
        mpfr_init(r56460);
        mpfr_init(r56461);
        mpfr_init(r56462);
        mpfr_init_set_str(r56463, "4.0", 10, MPFR_RNDN);
        mpfr_init(r56464);
        mpfr_init(r56465);
}

double f_fm(double x, double y, double z) {
        ;
        ;
        mpfr_add(r56456, r56454, r56455, MPFR_RNDN);
        mpfr_set_d(r56457, z, MPFR_RNDN);
        mpfr_set_d(r56458, y, MPFR_RNDN);
        mpfr_div(r56459, r56457, r56458, MPFR_RNDN);
        mpfr_set_d(r56460, x, MPFR_RNDN);
        mpfr_div(r56461, r56460, r56458, MPFR_RNDN);
        mpfr_sub(r56462, r56459, r56461, MPFR_RNDN);
        ;
        mpfr_mul(r56464, r56462, r56463, MPFR_RNDN);
        mpfr_sub(r56465, r56456, r56464, MPFR_RNDN);
        return mpfr_get_d(r56465, MPFR_RNDN);
}

static mpfr_t r56466, r56467, r56468, r56469, r56470, r56471, r56472, r56473, r56474, r56475, r56476, r56477;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r56466, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r56467, "3.0", 10, MPFR_RNDN);
        mpfr_init(r56468);
        mpfr_init(r56469);
        mpfr_init(r56470);
        mpfr_init(r56471);
        mpfr_init(r56472);
        mpfr_init(r56473);
        mpfr_init(r56474);
        mpfr_init_set_str(r56475, "4.0", 10, MPFR_RNDN);
        mpfr_init(r56476);
        mpfr_init(r56477);
}

double f_dm(double x, double y, double z) {
        ;
        ;
        mpfr_add(r56468, r56466, r56467, MPFR_RNDN);
        mpfr_set_d(r56469, z, MPFR_RNDN);
        mpfr_set_d(r56470, y, MPFR_RNDN);
        mpfr_div(r56471, r56469, r56470, MPFR_RNDN);
        mpfr_set_d(r56472, x, MPFR_RNDN);
        mpfr_div(r56473, r56472, r56470, MPFR_RNDN);
        mpfr_sub(r56474, r56471, r56473, MPFR_RNDN);
        ;
        mpfr_mul(r56476, r56474, r56475, MPFR_RNDN);
        mpfr_sub(r56477, r56468, r56476, MPFR_RNDN);
        return mpfr_get_d(r56477, MPFR_RNDN);
}

