#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "Graphics.Rasterific.Shading:$sgradientColorAt from Rasterific-0.6.1";

double f_if(float x, float y, float z) {
        float r48329 = x;
        float r48330 = y;
        float r48331 = r48329 - r48330;
        float r48332 = z;
        float r48333 = r48332 - r48330;
        float r48334 = r48331 / r48333;
        return r48334;
}

double f_id(double x, double y, double z) {
        double r48335 = x;
        double r48336 = y;
        double r48337 = r48335 - r48336;
        double r48338 = z;
        double r48339 = r48338 - r48336;
        double r48340 = r48337 / r48339;
        return r48340;
}


double f_of(float x, float y, float z) {
        float r48341 = x;
        float r48342 = z;
        float r48343 = y;
        float r48344 = r48342 - r48343;
        float r48345 = r48341 / r48344;
        float r48346 = r48343 / r48344;
        float r48347 = r48345 - r48346;
        return r48347;
}

double f_od(double x, double y, double z) {
        double r48348 = x;
        double r48349 = z;
        double r48350 = y;
        double r48351 = r48349 - r48350;
        double r48352 = r48348 / r48351;
        double r48353 = r48350 / r48351;
        double r48354 = r48352 - r48353;
        return r48354;
}

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 r48355, r48356, r48357, r48358, r48359, r48360;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r48355);
        mpfr_init(r48356);
        mpfr_init(r48357);
        mpfr_init(r48358);
        mpfr_init(r48359);
        mpfr_init(r48360);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r48355, x, MPFR_RNDN);
        mpfr_set_d(r48356, y, MPFR_RNDN);
        mpfr_sub(r48357, r48355, r48356, MPFR_RNDN);
        mpfr_set_d(r48358, z, MPFR_RNDN);
        mpfr_sub(r48359, r48358, r48356, MPFR_RNDN);
        mpfr_div(r48360, r48357, r48359, MPFR_RNDN);
        return mpfr_get_d(r48360, MPFR_RNDN);
}

static mpfr_t r48361, r48362, r48363, r48364, r48365, r48366, r48367;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r48361);
        mpfr_init(r48362);
        mpfr_init(r48363);
        mpfr_init(r48364);
        mpfr_init(r48365);
        mpfr_init(r48366);
        mpfr_init(r48367);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r48361, x, MPFR_RNDN);
        mpfr_set_d(r48362, z, MPFR_RNDN);
        mpfr_set_d(r48363, y, MPFR_RNDN);
        mpfr_sub(r48364, r48362, r48363, MPFR_RNDN);
        mpfr_div(r48365, r48361, r48364, MPFR_RNDN);
        mpfr_div(r48366, r48363, r48364, MPFR_RNDN);
        mpfr_sub(r48367, r48365, r48366, MPFR_RNDN);
        return mpfr_get_d(r48367, MPFR_RNDN);
}

static mpfr_t r48368, r48369, r48370, r48371, r48372, r48373, r48374;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r48368);
        mpfr_init(r48369);
        mpfr_init(r48370);
        mpfr_init(r48371);
        mpfr_init(r48372);
        mpfr_init(r48373);
        mpfr_init(r48374);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r48368, x, MPFR_RNDN);
        mpfr_set_d(r48369, z, MPFR_RNDN);
        mpfr_set_d(r48370, y, MPFR_RNDN);
        mpfr_sub(r48371, r48369, r48370, MPFR_RNDN);
        mpfr_div(r48372, r48368, r48371, MPFR_RNDN);
        mpfr_div(r48373, r48370, r48371, MPFR_RNDN);
        mpfr_sub(r48374, r48372, r48373, MPFR_RNDN);
        return mpfr_get_d(r48374, MPFR_RNDN);
}

