#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 r57253 = 1.0f;
        float r57254 = 4.0f;
        float r57255 = x;
        float r57256 = y;
        float r57257 = 0.75f;
        float r57258 = r57256 * r57257;
        float r57259 = r57255 + r57258;
        float r57260 = z;
        float r57261 = r57259 - r57260;
        float r57262 = r57254 * r57261;
        float r57263 = r57262 / r57256;
        float r57264 = r57253 + r57263;
        return r57264;
}

double f_id(double x, double y, double z) {
        double r57265 = 1.0;
        double r57266 = 4.0;
        double r57267 = x;
        double r57268 = y;
        double r57269 = 0.75;
        double r57270 = r57268 * r57269;
        double r57271 = r57267 + r57270;
        double r57272 = z;
        double r57273 = r57271 - r57272;
        double r57274 = r57266 * r57273;
        double r57275 = r57274 / r57268;
        double r57276 = r57265 + r57275;
        return r57276;
}


double f_of(float x, float y, float z) {
        float r57277 = 1.0f;
        float r57278 = 3.0f;
        float r57279 = r57277 + r57278;
        float r57280 = 4.0f;
        float r57281 = y;
        float r57282 = r57280 / r57281;
        float r57283 = z;
        float r57284 = x;
        float r57285 = r57283 - r57284;
        float r57286 = r57282 * r57285;
        float r57287 = r57279 - r57286;
        return r57287;
}

double f_od(double x, double y, double z) {
        double r57288 = 1.0;
        double r57289 = 3.0;
        double r57290 = r57288 + r57289;
        double r57291 = 4.0;
        double r57292 = y;
        double r57293 = r57291 / r57292;
        double r57294 = z;
        double r57295 = x;
        double r57296 = r57294 - r57295;
        double r57297 = r57293 * r57296;
        double r57298 = r57290 - r57297;
        return r57298;
}

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 r57299, r57300, r57301, r57302, r57303, r57304, r57305, r57306, r57307, r57308, r57309, r57310;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r57299, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r57300, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57301);
        mpfr_init(r57302);
        mpfr_init_set_str(r57303, "0.75", 10, MPFR_RNDN);
        mpfr_init(r57304);
        mpfr_init(r57305);
        mpfr_init(r57306);
        mpfr_init(r57307);
        mpfr_init(r57308);
        mpfr_init(r57309);
        mpfr_init(r57310);
}

double f_im(double x, double y, double z) {
        ;
        ;
        mpfr_set_d(r57301, x, MPFR_RNDN);
        mpfr_set_d(r57302, y, MPFR_RNDN);
        ;
        mpfr_mul(r57304, r57302, r57303, MPFR_RNDN);
        mpfr_add(r57305, r57301, r57304, MPFR_RNDN);
        mpfr_set_d(r57306, z, MPFR_RNDN);
        mpfr_sub(r57307, r57305, r57306, MPFR_RNDN);
        mpfr_mul(r57308, r57300, r57307, MPFR_RNDN);
        mpfr_div(r57309, r57308, r57302, MPFR_RNDN);
        mpfr_add(r57310, r57299, r57309, MPFR_RNDN);
        return mpfr_get_d(r57310, MPFR_RNDN);
}

static mpfr_t r57311, r57312, r57313, r57314, r57315, r57316, r57317, r57318, r57319, r57320, r57321;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r57311, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r57312, "3.0", 10, MPFR_RNDN);
        mpfr_init(r57313);
        mpfr_init_set_str(r57314, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57315);
        mpfr_init(r57316);
        mpfr_init(r57317);
        mpfr_init(r57318);
        mpfr_init(r57319);
        mpfr_init(r57320);
        mpfr_init(r57321);
}

double f_fm(double x, double y, double z) {
        ;
        ;
        mpfr_add(r57313, r57311, r57312, MPFR_RNDN);
        ;
        mpfr_set_d(r57315, y, MPFR_RNDN);
        mpfr_div(r57316, r57314, r57315, MPFR_RNDN);
        mpfr_set_d(r57317, z, MPFR_RNDN);
        mpfr_set_d(r57318, x, MPFR_RNDN);
        mpfr_sub(r57319, r57317, r57318, MPFR_RNDN);
        mpfr_mul(r57320, r57316, r57319, MPFR_RNDN);
        mpfr_sub(r57321, r57313, r57320, MPFR_RNDN);
        return mpfr_get_d(r57321, MPFR_RNDN);
}

static mpfr_t r57322, r57323, r57324, r57325, r57326, r57327, r57328, r57329, r57330, r57331, r57332;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r57322, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r57323, "3.0", 10, MPFR_RNDN);
        mpfr_init(r57324);
        mpfr_init_set_str(r57325, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57326);
        mpfr_init(r57327);
        mpfr_init(r57328);
        mpfr_init(r57329);
        mpfr_init(r57330);
        mpfr_init(r57331);
        mpfr_init(r57332);
}

double f_dm(double x, double y, double z) {
        ;
        ;
        mpfr_add(r57324, r57322, r57323, MPFR_RNDN);
        ;
        mpfr_set_d(r57326, y, MPFR_RNDN);
        mpfr_div(r57327, r57325, r57326, MPFR_RNDN);
        mpfr_set_d(r57328, z, MPFR_RNDN);
        mpfr_set_d(r57329, x, MPFR_RNDN);
        mpfr_sub(r57330, r57328, r57329, MPFR_RNDN);
        mpfr_mul(r57331, r57327, r57330, MPFR_RNDN);
        mpfr_sub(r57332, r57324, r57331, MPFR_RNDN);
        return mpfr_get_d(r57332, MPFR_RNDN);
}

