#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 r57465 = 1.0;
        float r57466 = 4.0;
        float r57467 = x;
        float r57468 = y;
        float r57469 = 0.25;
        float r57470 = r57468 * r57469;
        float r57471 = r57467 + r57470;
        float r57472 = z;
        float r57473 = r57471 - r57472;
        float r57474 = r57466 * r57473;
        float r57475 = r57474 / r57468;
        float r57476 = r57465 + r57475;
        return r57476;
}

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


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

double f_od(double x, double y, double z) {
        double r57499 = 2.0;
        double r57500 = z;
        double r57501 = y;
        double r57502 = r57500 / r57501;
        double r57503 = x;
        double r57504 = r57503 / r57501;
        double r57505 = r57502 - r57504;
        double r57506 = 4.0;
        double r57507 = r57505 * r57506;
        double r57508 = r57499 - 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, r57519, r57520;

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

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

static mpfr_t r57521, r57522, r57523, r57524, r57525, r57526, r57527, r57528, r57529, r57530;

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

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

static mpfr_t r57531, r57532, r57533, r57534, r57535, r57536, r57537, r57538, r57539, r57540;

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

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

