#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 r57469 = 4.0;
        float r57470 = x;
        float r57471 = y;
        float r57472 = r57470 - r57471;
        float r57473 = z;
        float r57474 = 0.5;
        float r57475 = r57473 * r57474;
        float r57476 = r57472 - r57475;
        float r57477 = r57469 * r57476;
        float r57478 = r57477 / r57473;
        return r57478;
}

double f_id(double x, double y, double z) {
        double r57479 = 4.0;
        double r57480 = x;
        double r57481 = y;
        double r57482 = r57480 - r57481;
        double r57483 = z;
        double r57484 = 0.5;
        double r57485 = r57483 * r57484;
        double r57486 = r57482 - r57485;
        double r57487 = r57479 * r57486;
        double r57488 = r57487 / r57483;
        return r57488;
}


double f_of(float x, float y, float z) {
        float r57489 = x;
        float r57490 = z;
        float r57491 = r57489 / r57490;
        float r57492 = y;
        float r57493 = r57492 / r57490;
        float r57494 = r57491 - r57493;
        float r57495 = 4.0;
        float r57496 = r57494 * r57495;
        float r57497 = 2.0;
        float r57498 = r57496 - r57497;
        return r57498;
}

double f_od(double x, double y, double z) {
        double r57499 = x;
        double r57500 = z;
        double r57501 = r57499 / r57500;
        double r57502 = y;
        double r57503 = r57502 / r57500;
        double r57504 = r57501 - r57503;
        double r57505 = 4.0;
        double r57506 = r57504 * r57505;
        double r57507 = 2.0;
        double r57508 = r57506 - r57507;
        return r57508;
}

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 r57509, r57510, r57511, r57512, r57513, r57514, r57515, r57516, r57517, r57518;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r57509, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57510);
        mpfr_init(r57511);
        mpfr_init(r57512);
        mpfr_init(r57513);
        mpfr_init_set_str(r57514, "0.5", 10, MPFR_RNDN);
        mpfr_init(r57515);
        mpfr_init(r57516);
        mpfr_init(r57517);
        mpfr_init(r57518);
}

double f_im(double x, double y, double z) {
        ;
        mpfr_set_d(r57510, x, MPFR_RNDN);
        mpfr_set_d(r57511, y, MPFR_RNDN);
        mpfr_sub(r57512, r57510, r57511, MPFR_RNDN);
        mpfr_set_d(r57513, z, MPFR_RNDN);
        ;
        mpfr_mul(r57515, r57513, r57514, MPFR_RNDN);
        mpfr_sub(r57516, r57512, r57515, MPFR_RNDN);
        mpfr_mul(r57517, r57509, r57516, MPFR_RNDN);
        mpfr_div(r57518, r57517, r57513, MPFR_RNDN);
        return mpfr_get_d(r57518, MPFR_RNDN);
}

static mpfr_t r57519, r57520, r57521, r57522, r57523, r57524, r57525, r57526, r57527, r57528;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57519);
        mpfr_init(r57520);
        mpfr_init(r57521);
        mpfr_init(r57522);
        mpfr_init(r57523);
        mpfr_init(r57524);
        mpfr_init_set_str(r57525, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57526);
        mpfr_init_set_str(r57527, "2.0", 10, MPFR_RNDN);
        mpfr_init(r57528);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r57519, x, MPFR_RNDN);
        mpfr_set_d(r57520, z, MPFR_RNDN);
        mpfr_div(r57521, r57519, r57520, MPFR_RNDN);
        mpfr_set_d(r57522, y, MPFR_RNDN);
        mpfr_div(r57523, r57522, r57520, MPFR_RNDN);
        mpfr_sub(r57524, r57521, r57523, MPFR_RNDN);
        ;
        mpfr_mul(r57526, r57524, r57525, MPFR_RNDN);
        ;
        mpfr_sub(r57528, r57526, r57527, MPFR_RNDN);
        return mpfr_get_d(r57528, MPFR_RNDN);
}

static mpfr_t r57529, r57530, r57531, r57532, r57533, r57534, r57535, r57536, r57537, r57538;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r57529);
        mpfr_init(r57530);
        mpfr_init(r57531);
        mpfr_init(r57532);
        mpfr_init(r57533);
        mpfr_init(r57534);
        mpfr_init_set_str(r57535, "4.0", 10, MPFR_RNDN);
        mpfr_init(r57536);
        mpfr_init_set_str(r57537, "2.0", 10, MPFR_RNDN);
        mpfr_init(r57538);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r57529, x, MPFR_RNDN);
        mpfr_set_d(r57530, z, MPFR_RNDN);
        mpfr_div(r57531, r57529, r57530, MPFR_RNDN);
        mpfr_set_d(r57532, y, MPFR_RNDN);
        mpfr_div(r57533, r57532, r57530, MPFR_RNDN);
        mpfr_sub(r57534, r57531, r57533, MPFR_RNDN);
        ;
        mpfr_mul(r57536, r57534, r57535, MPFR_RNDN);
        ;
        mpfr_sub(r57538, r57536, r57537, MPFR_RNDN);
        return mpfr_get_d(r57538, MPFR_RNDN);
}

