#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 r57183 = 4.0f;
        float r57184 = x;
        float r57185 = y;
        float r57186 = r57184 - r57185;
        float r57187 = z;
        float r57188 = 0.5f;
        float r57189 = r57187 * r57188;
        float r57190 = r57186 - r57189;
        float r57191 = r57183 * r57190;
        float r57192 = r57191 / r57187;
        return r57192;
}

double f_id(double x, double y, double z) {
        double r57193 = 4.0;
        double r57194 = x;
        double r57195 = y;
        double r57196 = r57194 - r57195;
        double r57197 = z;
        double r57198 = 0.5;
        double r57199 = r57197 * r57198;
        double r57200 = r57196 - r57199;
        double r57201 = r57193 * r57200;
        double r57202 = r57201 / r57197;
        return r57202;
}


double f_of(float x, float y, float z) {
        float r57203 = 4.0f;
        float r57204 = x;
        float r57205 = z;
        float r57206 = r57204 / r57205;
        float r57207 = y;
        float r57208 = r57207 / r57205;
        float r57209 = r57206 - r57208;
        float r57210 = r57203 * r57209;
        float r57211 = 2.0f;
        float r57212 = r57210 - r57211;
        return r57212;
}

double f_od(double x, double y, double z) {
        double r57213 = 4.0;
        double r57214 = x;
        double r57215 = z;
        double r57216 = r57214 / r57215;
        double r57217 = y;
        double r57218 = r57217 / r57215;
        double r57219 = r57216 - r57218;
        double r57220 = r57213 * r57219;
        double r57221 = 2.0;
        double r57222 = r57220 - r57221;
        return r57222;
}

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 r57223, r57224, r57225, r57226, r57227, r57228, r57229, r57230, r57231, r57232;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r57223, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57224);
        mpfr_init(r57225);
        mpfr_init(r57226);
        mpfr_init(r57227);
        mpfr_init_set_str(r57228, "0.5", 10, MPFR_RNDN);
        mpfr_init(r57229);
        mpfr_init(r57230);
        mpfr_init(r57231);
        mpfr_init(r57232);
}

double f_im(double x, double y, double z) {
        ;
        mpfr_set_d(r57224, x, MPFR_RNDN);
        mpfr_set_d(r57225, y, MPFR_RNDN);
        mpfr_sub(r57226, r57224, r57225, MPFR_RNDN);
        mpfr_set_d(r57227, z, MPFR_RNDN);
        ;
        mpfr_mul(r57229, r57227, r57228, MPFR_RNDN);
        mpfr_sub(r57230, r57226, r57229, MPFR_RNDN);
        mpfr_mul(r57231, r57223, r57230, MPFR_RNDN);
        mpfr_div(r57232, r57231, r57227, MPFR_RNDN);
        return mpfr_get_d(r57232, MPFR_RNDN);
}

static mpfr_t r57233, r57234, r57235, r57236, r57237, r57238, r57239, r57240, r57241, r57242;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r57233, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57234);
        mpfr_init(r57235);
        mpfr_init(r57236);
        mpfr_init(r57237);
        mpfr_init(r57238);
        mpfr_init(r57239);
        mpfr_init(r57240);
        mpfr_init_set_str(r57241, "2.0", 10, MPFR_RNDN);
        mpfr_init(r57242);
}

double f_fm(double x, double y, double z) {
        ;
        mpfr_set_d(r57234, x, MPFR_RNDN);
        mpfr_set_d(r57235, z, MPFR_RNDN);
        mpfr_div(r57236, r57234, r57235, MPFR_RNDN);
        mpfr_set_d(r57237, y, MPFR_RNDN);
        mpfr_div(r57238, r57237, r57235, MPFR_RNDN);
        mpfr_sub(r57239, r57236, r57238, MPFR_RNDN);
        mpfr_mul(r57240, r57233, r57239, MPFR_RNDN);
        ;
        mpfr_sub(r57242, r57240, r57241, MPFR_RNDN);
        return mpfr_get_d(r57242, MPFR_RNDN);
}

static mpfr_t r57243, r57244, r57245, r57246, r57247, r57248, r57249, r57250, r57251, r57252;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r57243, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57244);
        mpfr_init(r57245);
        mpfr_init(r57246);
        mpfr_init(r57247);
        mpfr_init(r57248);
        mpfr_init(r57249);
        mpfr_init(r57250);
        mpfr_init_set_str(r57251, "2.0", 10, MPFR_RNDN);
        mpfr_init(r57252);
}

double f_dm(double x, double y, double z) {
        ;
        mpfr_set_d(r57244, x, MPFR_RNDN);
        mpfr_set_d(r57245, z, MPFR_RNDN);
        mpfr_div(r57246, r57244, r57245, MPFR_RNDN);
        mpfr_set_d(r57247, y, MPFR_RNDN);
        mpfr_div(r57248, r57247, r57245, MPFR_RNDN);
        mpfr_sub(r57249, r57246, r57248, MPFR_RNDN);
        mpfr_mul(r57250, r57243, r57249, MPFR_RNDN);
        ;
        mpfr_sub(r57252, r57250, r57251, MPFR_RNDN);
        return mpfr_get_d(r57252, MPFR_RNDN);
}

