#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 r57099 = 1.0f;
        float r57100 = 4.0f;
        float r57101 = x;
        float r57102 = y;
        float r57103 = 0.25f;
        float r57104 = r57102 * r57103;
        float r57105 = r57101 + r57104;
        float r57106 = z;
        float r57107 = r57105 - r57106;
        float r57108 = r57100 * r57107;
        float r57109 = r57108 / r57102;
        float r57110 = r57099 + r57109;
        return r57110;
}

double f_id(double x, double y, double z) {
        double r57111 = 1.0;
        double r57112 = 4.0;
        double r57113 = x;
        double r57114 = y;
        double r57115 = 0.25;
        double r57116 = r57114 * r57115;
        double r57117 = r57113 + r57116;
        double r57118 = z;
        double r57119 = r57117 - r57118;
        double r57120 = r57112 * r57119;
        double r57121 = r57120 / r57114;
        double r57122 = r57111 + r57121;
        return r57122;
}


double f_of(float x, float y, float z) {
        float r57123 = 1.0f;
        float r57124 = 4.0f;
        float r57125 = y;
        float r57126 = x;
        float r57127 = 0.25f;
        float r57128 = r57125 * r57127;
        float r57129 = r57126 + r57128;
        float r57130 = z;
        float r57131 = r57129 - r57130;
        float r57132 = r57125 / r57131;
        float r57133 = r57124 / r57132;
        float r57134 = r57123 + r57133;
        return r57134;
}

double f_od(double x, double y, double z) {
        double r57135 = 1.0;
        double r57136 = 4.0;
        double r57137 = y;
        double r57138 = x;
        double r57139 = 0.25;
        double r57140 = r57137 * r57139;
        double r57141 = r57138 + r57140;
        double r57142 = z;
        double r57143 = r57141 - r57142;
        double r57144 = r57137 / r57143;
        double r57145 = r57136 / r57144;
        double r57146 = r57135 + r57145;
        return r57146;
}

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 r57147, r57148, r57149, r57150, r57151, r57152, r57153, r57154, r57155, r57156, r57157, r57158;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r57147, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r57148, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57149);
        mpfr_init(r57150);
        mpfr_init_set_str(r57151, "0.25", 10, MPFR_RNDN);
        mpfr_init(r57152);
        mpfr_init(r57153);
        mpfr_init(r57154);
        mpfr_init(r57155);
        mpfr_init(r57156);
        mpfr_init(r57157);
        mpfr_init(r57158);
}

double f_im(double x, double y, double z) {
        ;
        ;
        mpfr_set_d(r57149, x, MPFR_RNDN);
        mpfr_set_d(r57150, y, MPFR_RNDN);
        ;
        mpfr_mul(r57152, r57150, r57151, MPFR_RNDN);
        mpfr_add(r57153, r57149, r57152, MPFR_RNDN);
        mpfr_set_d(r57154, z, MPFR_RNDN);
        mpfr_sub(r57155, r57153, r57154, MPFR_RNDN);
        mpfr_mul(r57156, r57148, r57155, MPFR_RNDN);
        mpfr_div(r57157, r57156, r57150, MPFR_RNDN);
        mpfr_add(r57158, r57147, r57157, MPFR_RNDN);
        return mpfr_get_d(r57158, MPFR_RNDN);
}

static mpfr_t r57159, r57160, r57161, r57162, r57163, r57164, r57165, r57166, r57167, r57168, r57169, r57170;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r57159, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r57160, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57161);
        mpfr_init(r57162);
        mpfr_init_set_str(r57163, "0.25", 10, MPFR_RNDN);
        mpfr_init(r57164);
        mpfr_init(r57165);
        mpfr_init(r57166);
        mpfr_init(r57167);
        mpfr_init(r57168);
        mpfr_init(r57169);
        mpfr_init(r57170);
}

double f_fm(double x, double y, double z) {
        ;
        ;
        mpfr_set_d(r57161, y, MPFR_RNDN);
        mpfr_set_d(r57162, x, MPFR_RNDN);
        ;
        mpfr_mul(r57164, r57161, r57163, MPFR_RNDN);
        mpfr_add(r57165, r57162, r57164, MPFR_RNDN);
        mpfr_set_d(r57166, z, MPFR_RNDN);
        mpfr_sub(r57167, r57165, r57166, MPFR_RNDN);
        mpfr_div(r57168, r57161, r57167, MPFR_RNDN);
        mpfr_div(r57169, r57160, r57168, MPFR_RNDN);
        mpfr_add(r57170, r57159, r57169, MPFR_RNDN);
        return mpfr_get_d(r57170, MPFR_RNDN);
}

static mpfr_t r57171, r57172, r57173, r57174, r57175, r57176, r57177, r57178, r57179, r57180, r57181, r57182;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r57171, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r57172, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57173);
        mpfr_init(r57174);
        mpfr_init_set_str(r57175, "0.25", 10, MPFR_RNDN);
        mpfr_init(r57176);
        mpfr_init(r57177);
        mpfr_init(r57178);
        mpfr_init(r57179);
        mpfr_init(r57180);
        mpfr_init(r57181);
        mpfr_init(r57182);
}

double f_dm(double x, double y, double z) {
        ;
        ;
        mpfr_set_d(r57173, y, MPFR_RNDN);
        mpfr_set_d(r57174, x, MPFR_RNDN);
        ;
        mpfr_mul(r57176, r57173, r57175, MPFR_RNDN);
        mpfr_add(r57177, r57174, r57176, MPFR_RNDN);
        mpfr_set_d(r57178, z, MPFR_RNDN);
        mpfr_sub(r57179, r57177, r57178, MPFR_RNDN);
        mpfr_div(r57180, r57173, r57179, MPFR_RNDN);
        mpfr_div(r57181, r57172, r57180, MPFR_RNDN);
        mpfr_add(r57182, r57171, r57181, MPFR_RNDN);
        return mpfr_get_d(r57182, MPFR_RNDN);
}

