#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, C";

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.25;
        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.25;
        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 = 2.0;
        float r57564 = z;
        float r57565 = y;
        float r57566 = r57564 / r57565;
        float r57567 = x;
        float r57568 = r57567 / r57565;
        float r57569 = r57566 - r57568;
        float r57570 = 4.0;
        float r57571 = r57569 * r57570;
        float r57572 = r57563 - r57571;
        return r57572;
}

double f_od(double x, double y, double z) {
        double r57573 = 2.0;
        double r57574 = z;
        double r57575 = y;
        double r57576 = r57574 / r57575;
        double r57577 = x;
        double r57578 = r57577 / r57575;
        double r57579 = r57576 - r57578;
        double r57580 = 4.0;
        double r57581 = r57579 * r57580;
        double r57582 = r57573 - r57581;
        return r57582;
}

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 r57583, r57584, r57585, r57586, r57587, r57588, r57589, r57590, r57591, r57592, r57593, r57594;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r57583, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r57584, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57585);
        mpfr_init(r57586);
        mpfr_init_set_str(r57587, "0.25", 10, MPFR_RNDN);
        mpfr_init(r57588);
        mpfr_init(r57589);
        mpfr_init(r57590);
        mpfr_init(r57591);
        mpfr_init(r57592);
        mpfr_init(r57593);
        mpfr_init(r57594);
}

double f_im(double x, double y, double z) {
        ;
        ;
        mpfr_set_d(r57585, x, MPFR_RNDN);
        mpfr_set_d(r57586, y, MPFR_RNDN);
        ;
        mpfr_mul(r57588, r57586, r57587, MPFR_RNDN);
        mpfr_add(r57589, r57585, r57588, MPFR_RNDN);
        mpfr_set_d(r57590, z, MPFR_RNDN);
        mpfr_sub(r57591, r57589, r57590, MPFR_RNDN);
        mpfr_mul(r57592, r57584, r57591, MPFR_RNDN);
        mpfr_div(r57593, r57592, r57586, MPFR_RNDN);
        mpfr_add(r57594, r57583, r57593, MPFR_RNDN);
        return mpfr_get_d(r57594, MPFR_RNDN);
}

static mpfr_t r57595, r57596, r57597, r57598, r57599, r57600, r57601, r57602, r57603, r57604;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r57595, "2.0", 10, MPFR_RNDN);
        mpfr_init(r57596);
        mpfr_init(r57597);
        mpfr_init(r57598);
        mpfr_init(r57599);
        mpfr_init(r57600);
        mpfr_init(r57601);
        mpfr_init_set_str(r57602, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57603);
        mpfr_init(r57604);
}

double f_fm(double x, double y, double z) {
        ;
        mpfr_set_d(r57596, z, MPFR_RNDN);
        mpfr_set_d(r57597, y, MPFR_RNDN);
        mpfr_div(r57598, r57596, r57597, MPFR_RNDN);
        mpfr_set_d(r57599, x, MPFR_RNDN);
        mpfr_div(r57600, r57599, r57597, MPFR_RNDN);
        mpfr_sub(r57601, r57598, r57600, MPFR_RNDN);
        ;
        mpfr_mul(r57603, r57601, r57602, MPFR_RNDN);
        mpfr_sub(r57604, r57595, r57603, MPFR_RNDN);
        return mpfr_get_d(r57604, MPFR_RNDN);
}

static mpfr_t r57605, r57606, r57607, r57608, r57609, r57610, r57611, r57612, r57613, r57614;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r57605, "2.0", 10, MPFR_RNDN);
        mpfr_init(r57606);
        mpfr_init(r57607);
        mpfr_init(r57608);
        mpfr_init(r57609);
        mpfr_init(r57610);
        mpfr_init(r57611);
        mpfr_init_set_str(r57612, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57613);
        mpfr_init(r57614);
}

double f_dm(double x, double y, double z) {
        ;
        mpfr_set_d(r57606, z, MPFR_RNDN);
        mpfr_set_d(r57607, y, MPFR_RNDN);
        mpfr_div(r57608, r57606, r57607, MPFR_RNDN);
        mpfr_set_d(r57609, x, MPFR_RNDN);
        mpfr_div(r57610, r57609, r57607, MPFR_RNDN);
        mpfr_sub(r57611, r57608, r57610, MPFR_RNDN);
        ;
        mpfr_mul(r57613, r57611, r57612, MPFR_RNDN);
        mpfr_sub(r57614, r57605, r57613, MPFR_RNDN);
        return mpfr_get_d(r57614, MPFR_RNDN);
}

