#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 r57615 = 4.0;
        float r57616 = x;
        float r57617 = y;
        float r57618 = r57616 - r57617;
        float r57619 = z;
        float r57620 = 0.5;
        float r57621 = r57619 * r57620;
        float r57622 = r57618 - r57621;
        float r57623 = r57615 * r57622;
        float r57624 = r57623 / r57619;
        return r57624;
}

double f_id(double x, double y, double z) {
        double r57625 = 4.0;
        double r57626 = x;
        double r57627 = y;
        double r57628 = r57626 - r57627;
        double r57629 = z;
        double r57630 = 0.5;
        double r57631 = r57629 * r57630;
        double r57632 = r57628 - r57631;
        double r57633 = r57625 * r57632;
        double r57634 = r57633 / r57629;
        return r57634;
}


double f_of(float x, float y, float z) {
        float r57635 = x;
        float r57636 = z;
        float r57637 = r57635 / r57636;
        float r57638 = y;
        float r57639 = r57638 / r57636;
        float r57640 = r57637 - r57639;
        float r57641 = 4.0;
        float r57642 = r57640 * r57641;
        float r57643 = 2.0;
        float r57644 = r57642 - r57643;
        return r57644;
}

double f_od(double x, double y, double z) {
        double r57645 = x;
        double r57646 = z;
        double r57647 = r57645 / r57646;
        double r57648 = y;
        double r57649 = r57648 / r57646;
        double r57650 = r57647 - r57649;
        double r57651 = 4.0;
        double r57652 = r57650 * r57651;
        double r57653 = 2.0;
        double r57654 = r57652 - r57653;
        return r57654;
}

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 r57655, r57656, r57657, r57658, r57659, r57660, r57661, r57662, r57663, r57664;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r57655, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57656);
        mpfr_init(r57657);
        mpfr_init(r57658);
        mpfr_init(r57659);
        mpfr_init_set_str(r57660, "0.5", 10, MPFR_RNDN);
        mpfr_init(r57661);
        mpfr_init(r57662);
        mpfr_init(r57663);
        mpfr_init(r57664);
}

double f_im(double x, double y, double z) {
        ;
        mpfr_set_d(r57656, x, MPFR_RNDN);
        mpfr_set_d(r57657, y, MPFR_RNDN);
        mpfr_sub(r57658, r57656, r57657, MPFR_RNDN);
        mpfr_set_d(r57659, z, MPFR_RNDN);
        ;
        mpfr_mul(r57661, r57659, r57660, MPFR_RNDN);
        mpfr_sub(r57662, r57658, r57661, MPFR_RNDN);
        mpfr_mul(r57663, r57655, r57662, MPFR_RNDN);
        mpfr_div(r57664, r57663, r57659, MPFR_RNDN);
        return mpfr_get_d(r57664, MPFR_RNDN);
}

static mpfr_t r57665, r57666, r57667, r57668, r57669, r57670, r57671, r57672, r57673, r57674;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57665);
        mpfr_init(r57666);
        mpfr_init(r57667);
        mpfr_init(r57668);
        mpfr_init(r57669);
        mpfr_init(r57670);
        mpfr_init_set_str(r57671, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57672);
        mpfr_init_set_str(r57673, "2.0", 10, MPFR_RNDN);
        mpfr_init(r57674);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r57665, x, MPFR_RNDN);
        mpfr_set_d(r57666, z, MPFR_RNDN);
        mpfr_div(r57667, r57665, r57666, MPFR_RNDN);
        mpfr_set_d(r57668, y, MPFR_RNDN);
        mpfr_div(r57669, r57668, r57666, MPFR_RNDN);
        mpfr_sub(r57670, r57667, r57669, MPFR_RNDN);
        ;
        mpfr_mul(r57672, r57670, r57671, MPFR_RNDN);
        ;
        mpfr_sub(r57674, r57672, r57673, MPFR_RNDN);
        return mpfr_get_d(r57674, MPFR_RNDN);
}

static mpfr_t r57675, r57676, r57677, r57678, r57679, r57680, r57681, r57682, r57683, r57684;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57675);
        mpfr_init(r57676);
        mpfr_init(r57677);
        mpfr_init(r57678);
        mpfr_init(r57679);
        mpfr_init(r57680);
        mpfr_init_set_str(r57681, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57682);
        mpfr_init_set_str(r57683, "2.0", 10, MPFR_RNDN);
        mpfr_init(r57684);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r57675, x, MPFR_RNDN);
        mpfr_set_d(r57676, z, MPFR_RNDN);
        mpfr_div(r57677, r57675, r57676, MPFR_RNDN);
        mpfr_set_d(r57678, y, MPFR_RNDN);
        mpfr_div(r57679, r57678, r57676, MPFR_RNDN);
        mpfr_sub(r57680, r57677, r57679, MPFR_RNDN);
        ;
        mpfr_mul(r57682, r57680, r57681, MPFR_RNDN);
        ;
        mpfr_sub(r57684, r57682, r57683, MPFR_RNDN);
        return mpfr_get_d(r57684, MPFR_RNDN);
}

