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

double f_if(float x, float y, float z) {
        float r57541 = 4.0;
        float r57542 = x;
        float r57543 = y;
        float r57544 = r57542 - r57543;
        float r57545 = z;
        float r57546 = 0.5;
        float r57547 = r57545 * r57546;
        float r57548 = r57544 - r57547;
        float r57549 = r57541 * r57548;
        float r57550 = r57549 / r57545;
        return r57550;
}

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


double f_of(float x, float y, float z) {
        float r57561 = x;
        float r57562 = z;
        float r57563 = r57561 / r57562;
        float r57564 = y;
        float r57565 = r57564 / r57562;
        float r57566 = r57563 - r57565;
        float r57567 = 4.0;
        float r57568 = r57566 * r57567;
        float r57569 = 2.0;
        float r57570 = r57568 - r57569;
        return r57570;
}

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

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 r57581, r57582, r57583, r57584, r57585, r57586, r57587, r57588, r57589, r57590;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r57581, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57582);
        mpfr_init(r57583);
        mpfr_init(r57584);
        mpfr_init(r57585);
        mpfr_init_set_str(r57586, "0.5", 10, MPFR_RNDN);
        mpfr_init(r57587);
        mpfr_init(r57588);
        mpfr_init(r57589);
        mpfr_init(r57590);
}

double f_im(double x, double y, double z) {
        ;
        mpfr_set_d(r57582, x, MPFR_RNDN);
        mpfr_set_d(r57583, y, MPFR_RNDN);
        mpfr_sub(r57584, r57582, r57583, MPFR_RNDN);
        mpfr_set_d(r57585, z, MPFR_RNDN);
        ;
        mpfr_mul(r57587, r57585, r57586, MPFR_RNDN);
        mpfr_sub(r57588, r57584, r57587, MPFR_RNDN);
        mpfr_mul(r57589, r57581, r57588, MPFR_RNDN);
        mpfr_div(r57590, r57589, r57585, MPFR_RNDN);
        return mpfr_get_d(r57590, MPFR_RNDN);
}

static mpfr_t r57591, r57592, r57593, r57594, r57595, r57596, r57597, r57598, r57599, r57600;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57591);
        mpfr_init(r57592);
        mpfr_init(r57593);
        mpfr_init(r57594);
        mpfr_init(r57595);
        mpfr_init(r57596);
        mpfr_init_set_str(r57597, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57598);
        mpfr_init_set_str(r57599, "2.0", 10, MPFR_RNDN);
        mpfr_init(r57600);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r57591, x, MPFR_RNDN);
        mpfr_set_d(r57592, z, MPFR_RNDN);
        mpfr_div(r57593, r57591, r57592, MPFR_RNDN);
        mpfr_set_d(r57594, y, MPFR_RNDN);
        mpfr_div(r57595, r57594, r57592, MPFR_RNDN);
        mpfr_sub(r57596, r57593, r57595, MPFR_RNDN);
        ;
        mpfr_mul(r57598, r57596, r57597, MPFR_RNDN);
        ;
        mpfr_sub(r57600, r57598, r57599, MPFR_RNDN);
        return mpfr_get_d(r57600, MPFR_RNDN);
}

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

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57601);
        mpfr_init(r57602);
        mpfr_init(r57603);
        mpfr_init(r57604);
        mpfr_init(r57605);
        mpfr_init(r57606);
        mpfr_init_set_str(r57607, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57608);
        mpfr_init_set_str(r57609, "2.0", 10, MPFR_RNDN);
        mpfr_init(r57610);
}

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

