#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 r57611 = 1.0;
        float r57612 = 4.0;
        float r57613 = x;
        float r57614 = y;
        float r57615 = 0.75;
        float r57616 = r57614 * r57615;
        float r57617 = r57613 + r57616;
        float r57618 = z;
        float r57619 = r57617 - r57618;
        float r57620 = r57612 * r57619;
        float r57621 = r57620 / r57614;
        float r57622 = r57611 + r57621;
        return r57622;
}

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


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

double f_od(double x, double y, double z) {
        double r57647 = 1.0;
        double r57648 = 3.0;
        double r57649 = r57647 + r57648;
        double r57650 = z;
        double r57651 = y;
        double r57652 = r57650 / r57651;
        double r57653 = x;
        double r57654 = r57653 / r57651;
        double r57655 = r57652 - r57654;
        double r57656 = 4.0;
        double r57657 = r57655 * r57656;
        double r57658 = r57649 - r57657;
        return r57658;
}

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 r57659, r57660, r57661, r57662, r57663, r57664, r57665, r57666, r57667, r57668, r57669, r57670;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r57659, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r57660, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57661);
        mpfr_init(r57662);
        mpfr_init_set_str(r57663, "0.75", 10, MPFR_RNDN);
        mpfr_init(r57664);
        mpfr_init(r57665);
        mpfr_init(r57666);
        mpfr_init(r57667);
        mpfr_init(r57668);
        mpfr_init(r57669);
        mpfr_init(r57670);
}

double f_im(double x, double y, double z) {
        ;
        ;
        mpfr_set_d(r57661, x, MPFR_RNDN);
        mpfr_set_d(r57662, y, MPFR_RNDN);
        ;
        mpfr_mul(r57664, r57662, r57663, MPFR_RNDN);
        mpfr_add(r57665, r57661, r57664, MPFR_RNDN);
        mpfr_set_d(r57666, z, MPFR_RNDN);
        mpfr_sub(r57667, r57665, r57666, MPFR_RNDN);
        mpfr_mul(r57668, r57660, r57667, MPFR_RNDN);
        mpfr_div(r57669, r57668, r57662, MPFR_RNDN);
        mpfr_add(r57670, r57659, r57669, MPFR_RNDN);
        return mpfr_get_d(r57670, MPFR_RNDN);
}

static mpfr_t r57671, r57672, r57673, r57674, r57675, r57676, r57677, r57678, r57679, r57680, r57681, r57682;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r57671, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r57672, "3.0", 10, MPFR_RNDN);
        mpfr_init(r57673);
        mpfr_init(r57674);
        mpfr_init(r57675);
        mpfr_init(r57676);
        mpfr_init(r57677);
        mpfr_init(r57678);
        mpfr_init(r57679);
        mpfr_init_set_str(r57680, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57681);
        mpfr_init(r57682);
}

double f_fm(double x, double y, double z) {
        ;
        ;
        mpfr_add(r57673, r57671, r57672, MPFR_RNDN);
        mpfr_set_d(r57674, z, MPFR_RNDN);
        mpfr_set_d(r57675, y, MPFR_RNDN);
        mpfr_div(r57676, r57674, r57675, MPFR_RNDN);
        mpfr_set_d(r57677, x, MPFR_RNDN);
        mpfr_div(r57678, r57677, r57675, MPFR_RNDN);
        mpfr_sub(r57679, r57676, r57678, MPFR_RNDN);
        ;
        mpfr_mul(r57681, r57679, r57680, MPFR_RNDN);
        mpfr_sub(r57682, r57673, r57681, MPFR_RNDN);
        return mpfr_get_d(r57682, MPFR_RNDN);
}

static mpfr_t r57683, r57684, r57685, r57686, r57687, r57688, r57689, r57690, r57691, r57692, r57693, r57694;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r57683, "1.0", 10, MPFR_RNDN);
        mpfr_init_set_str(r57684, "3.0", 10, MPFR_RNDN);
        mpfr_init(r57685);
        mpfr_init(r57686);
        mpfr_init(r57687);
        mpfr_init(r57688);
        mpfr_init(r57689);
        mpfr_init(r57690);
        mpfr_init(r57691);
        mpfr_init_set_str(r57692, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57693);
        mpfr_init(r57694);
}

double f_dm(double x, double y, double z) {
        ;
        ;
        mpfr_add(r57685, r57683, r57684, MPFR_RNDN);
        mpfr_set_d(r57686, z, MPFR_RNDN);
        mpfr_set_d(r57687, y, MPFR_RNDN);
        mpfr_div(r57688, r57686, r57687, MPFR_RNDN);
        mpfr_set_d(r57689, x, MPFR_RNDN);
        mpfr_div(r57690, r57689, r57687, MPFR_RNDN);
        mpfr_sub(r57691, r57688, r57690, MPFR_RNDN);
        ;
        mpfr_mul(r57693, r57691, r57692, MPFR_RNDN);
        mpfr_sub(r57694, r57685, r57693, MPFR_RNDN);
        return mpfr_get_d(r57694, MPFR_RNDN);
}

