#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 r57539 = 1.0;
        float r57540 = 4.0;
        float r57541 = x;
        float r57542 = y;
        float r57543 = 0.75;
        float r57544 = r57542 * r57543;
        float r57545 = r57541 + r57544;
        float r57546 = z;
        float r57547 = r57545 - r57546;
        float r57548 = r57540 * r57547;
        float r57549 = r57548 / r57542;
        float r57550 = r57539 + r57549;
        return r57550;
}

double f_id(double x, double y, double z) {
        double r57551 = 1.0;
        double r57552 = 4.0;
        double r57553 = x;
        double r57554 = y;
        double r57555 = 0.75;
        double r57556 = r57554 * r57555;
        double r57557 = r57553 + r57556;
        double r57558 = z;
        double r57559 = r57557 - r57558;
        double r57560 = r57552 * r57559;
        double r57561 = r57560 / r57554;
        double r57562 = r57551 + r57561;
        return r57562;
}


double f_of(float x, float y, float z) {
        float r57563 = 1.0;
        float r57564 = 3.0;
        float r57565 = r57563 + r57564;
        float r57566 = z;
        float r57567 = y;
        float r57568 = r57566 / r57567;
        float r57569 = x;
        float r57570 = r57569 / r57567;
        float r57571 = r57568 - r57570;
        float r57572 = 4.0;
        float r57573 = r57571 * r57572;
        float r57574 = r57565 - r57573;
        return r57574;
}

double f_od(double x, double y, double z) {
        double r57575 = 1.0;
        double r57576 = 3.0;
        double r57577 = r57575 + r57576;
        double r57578 = z;
        double r57579 = y;
        double r57580 = r57578 / r57579;
        double r57581 = x;
        double r57582 = r57581 / r57579;
        double r57583 = r57580 - r57582;
        double r57584 = 4.0;
        double r57585 = r57583 * r57584;
        double r57586 = r57577 - r57585;
        return r57586;
}

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 r57587, r57588, r57589, r57590, r57591, r57592, r57593, r57594, r57595, r57596, r57597, r57598;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r57587, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r57588, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57589);
        mpfr_init(r57590);
        mpfr_init_set_str(r57591, "0.75", 10, MPFR_RNDN);
        mpfr_init(r57592);
        mpfr_init(r57593);
        mpfr_init(r57594);
        mpfr_init(r57595);
        mpfr_init(r57596);
        mpfr_init(r57597);
        mpfr_init(r57598);
}

double f_im(double x, double y, double z) {
        ;
        ;
        mpfr_set_d(r57589, x, MPFR_RNDN);
        mpfr_set_d(r57590, y, MPFR_RNDN);
        ;
        mpfr_mul(r57592, r57590, r57591, MPFR_RNDN);
        mpfr_add(r57593, r57589, r57592, MPFR_RNDN);
        mpfr_set_d(r57594, z, MPFR_RNDN);
        mpfr_sub(r57595, r57593, r57594, MPFR_RNDN);
        mpfr_mul(r57596, r57588, r57595, MPFR_RNDN);
        mpfr_div(r57597, r57596, r57590, MPFR_RNDN);
        mpfr_add(r57598, r57587, r57597, MPFR_RNDN);
        return mpfr_get_d(r57598, MPFR_RNDN);
}

static mpfr_t r57599, r57600, r57601, r57602, r57603, r57604, r57605, r57606, r57607, r57608, r57609, r57610;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r57599, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r57600, "3.0", 10, MPFR_RNDN);
        mpfr_init(r57601);
        mpfr_init(r57602);
        mpfr_init(r57603);
        mpfr_init(r57604);
        mpfr_init(r57605);
        mpfr_init(r57606);
        mpfr_init(r57607);
        mpfr_init_set_str(r57608, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57609);
        mpfr_init(r57610);
}

double f_fm(double x, double y, double z) {
        ;
        ;
        mpfr_add(r57601, r57599, r57600, MPFR_RNDN);
        mpfr_set_d(r57602, z, MPFR_RNDN);
        mpfr_set_d(r57603, y, MPFR_RNDN);
        mpfr_div(r57604, r57602, r57603, MPFR_RNDN);
        mpfr_set_d(r57605, x, MPFR_RNDN);
        mpfr_div(r57606, r57605, r57603, MPFR_RNDN);
        mpfr_sub(r57607, r57604, r57606, MPFR_RNDN);
        ;
        mpfr_mul(r57609, r57607, r57608, MPFR_RNDN);
        mpfr_sub(r57610, r57601, r57609, MPFR_RNDN);
        return mpfr_get_d(r57610, MPFR_RNDN);
}

static mpfr_t r57611, r57612, r57613, r57614, r57615, r57616, r57617, r57618, r57619, r57620, r57621, r57622;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r57611, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r57612, "3.0", 10, MPFR_RNDN);
        mpfr_init(r57613);
        mpfr_init(r57614);
        mpfr_init(r57615);
        mpfr_init(r57616);
        mpfr_init(r57617);
        mpfr_init(r57618);
        mpfr_init(r57619);
        mpfr_init_set_str(r57620, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57621);
        mpfr_init(r57622);
}

double f_dm(double x, double y, double z) {
        ;
        ;
        mpfr_add(r57613, r57611, r57612, MPFR_RNDN);
        mpfr_set_d(r57614, z, MPFR_RNDN);
        mpfr_set_d(r57615, y, MPFR_RNDN);
        mpfr_div(r57616, r57614, r57615, MPFR_RNDN);
        mpfr_set_d(r57617, x, MPFR_RNDN);
        mpfr_div(r57618, r57617, r57615, MPFR_RNDN);
        mpfr_sub(r57619, r57616, r57618, MPFR_RNDN);
        ;
        mpfr_mul(r57621, r57619, r57620, MPFR_RNDN);
        mpfr_sub(r57622, r57613, r57621, MPFR_RNDN);
        return mpfr_get_d(r57622, MPFR_RNDN);
}

