#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 r57685 = 1.0;
        float r57686 = 4.0;
        float r57687 = x;
        float r57688 = y;
        float r57689 = 0.75;
        float r57690 = r57688 * r57689;
        float r57691 = r57687 + r57690;
        float r57692 = z;
        float r57693 = r57691 - r57692;
        float r57694 = r57686 * r57693;
        float r57695 = r57694 / r57688;
        float r57696 = r57685 + r57695;
        return r57696;
}

double f_id(double x, double y, double z) {
        double r57697 = 1.0;
        double r57698 = 4.0;
        double r57699 = x;
        double r57700 = y;
        double r57701 = 0.75;
        double r57702 = r57700 * r57701;
        double r57703 = r57699 + r57702;
        double r57704 = z;
        double r57705 = r57703 - r57704;
        double r57706 = r57698 * r57705;
        double r57707 = r57706 / r57700;
        double r57708 = r57697 + r57707;
        return r57708;
}


double f_of(float x, float y, float z) {
        float r57709 = 1.0;
        float r57710 = 3.0;
        float r57711 = r57709 + r57710;
        float r57712 = z;
        float r57713 = y;
        float r57714 = r57712 / r57713;
        float r57715 = x;
        float r57716 = r57715 / r57713;
        float r57717 = r57714 - r57716;
        float r57718 = 4.0;
        float r57719 = r57717 * r57718;
        float r57720 = r57711 - r57719;
        return r57720;
}

double f_od(double x, double y, double z) {
        double r57721 = 1.0;
        double r57722 = 3.0;
        double r57723 = r57721 + r57722;
        double r57724 = z;
        double r57725 = y;
        double r57726 = r57724 / r57725;
        double r57727 = x;
        double r57728 = r57727 / r57725;
        double r57729 = r57726 - r57728;
        double r57730 = 4.0;
        double r57731 = r57729 * r57730;
        double r57732 = r57723 - r57731;
        return r57732;
}

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 r57733, r57734, r57735, r57736, r57737, r57738, r57739, r57740, r57741, r57742, r57743, r57744;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r57733, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r57734, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57735);
        mpfr_init(r57736);
        mpfr_init_set_str(r57737, "0.75", 10, MPFR_RNDN);
        mpfr_init(r57738);
        mpfr_init(r57739);
        mpfr_init(r57740);
        mpfr_init(r57741);
        mpfr_init(r57742);
        mpfr_init(r57743);
        mpfr_init(r57744);
}

double f_im(double x, double y, double z) {
        ;
        ;
        mpfr_set_d(r57735, x, MPFR_RNDN);
        mpfr_set_d(r57736, y, MPFR_RNDN);
        ;
        mpfr_mul(r57738, r57736, r57737, MPFR_RNDN);
        mpfr_add(r57739, r57735, r57738, MPFR_RNDN);
        mpfr_set_d(r57740, z, MPFR_RNDN);
        mpfr_sub(r57741, r57739, r57740, MPFR_RNDN);
        mpfr_mul(r57742, r57734, r57741, MPFR_RNDN);
        mpfr_div(r57743, r57742, r57736, MPFR_RNDN);
        mpfr_add(r57744, r57733, r57743, MPFR_RNDN);
        return mpfr_get_d(r57744, MPFR_RNDN);
}

static mpfr_t r57745, r57746, r57747, r57748, r57749, r57750, r57751, r57752, r57753, r57754, r57755, r57756;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r57745, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r57746, "3.0", 10, MPFR_RNDN);
        mpfr_init(r57747);
        mpfr_init(r57748);
        mpfr_init(r57749);
        mpfr_init(r57750);
        mpfr_init(r57751);
        mpfr_init(r57752);
        mpfr_init(r57753);
        mpfr_init_set_str(r57754, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57755);
        mpfr_init(r57756);
}

double f_fm(double x, double y, double z) {
        ;
        ;
        mpfr_add(r57747, r57745, r57746, MPFR_RNDN);
        mpfr_set_d(r57748, z, MPFR_RNDN);
        mpfr_set_d(r57749, y, MPFR_RNDN);
        mpfr_div(r57750, r57748, r57749, MPFR_RNDN);
        mpfr_set_d(r57751, x, MPFR_RNDN);
        mpfr_div(r57752, r57751, r57749, MPFR_RNDN);
        mpfr_sub(r57753, r57750, r57752, MPFR_RNDN);
        ;
        mpfr_mul(r57755, r57753, r57754, MPFR_RNDN);
        mpfr_sub(r57756, r57747, r57755, MPFR_RNDN);
        return mpfr_get_d(r57756, MPFR_RNDN);
}

static mpfr_t r57757, r57758, r57759, r57760, r57761, r57762, r57763, r57764, r57765, r57766, r57767, r57768;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r57757, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r57758, "3.0", 10, MPFR_RNDN);
        mpfr_init(r57759);
        mpfr_init(r57760);
        mpfr_init(r57761);
        mpfr_init(r57762);
        mpfr_init(r57763);
        mpfr_init(r57764);
        mpfr_init(r57765);
        mpfr_init_set_str(r57766, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57767);
        mpfr_init(r57768);
}

double f_dm(double x, double y, double z) {
        ;
        ;
        mpfr_add(r57759, r57757, r57758, MPFR_RNDN);
        mpfr_set_d(r57760, z, MPFR_RNDN);
        mpfr_set_d(r57761, y, MPFR_RNDN);
        mpfr_div(r57762, r57760, r57761, MPFR_RNDN);
        mpfr_set_d(r57763, x, MPFR_RNDN);
        mpfr_div(r57764, r57763, r57761, MPFR_RNDN);
        mpfr_sub(r57765, r57762, r57764, MPFR_RNDN);
        ;
        mpfr_mul(r57767, r57765, r57766, MPFR_RNDN);
        mpfr_sub(r57768, r57759, r57767, MPFR_RNDN);
        return mpfr_get_d(r57768, MPFR_RNDN);
}

