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

char *name = "Diagrams.Backend.Rasterific:$crender from diagrams-rasterific-1.3.1.3";

double f_if(float x, float y, float z) {
        float r55475 = x;
        float r55476 = y;
        float r55477 = r55475 * r55476;
        float r55478 = 1.0;
        float r55479 = r55478 - r55475;
        float r55480 = z;
        float r55481 = r55479 * r55480;
        float r55482 = r55477 + r55481;
        return r55482;
}

double f_id(double x, double y, double z) {
        double r55483 = x;
        double r55484 = y;
        double r55485 = r55483 * r55484;
        double r55486 = 1.0;
        double r55487 = r55486 - r55483;
        double r55488 = z;
        double r55489 = r55487 * r55488;
        double r55490 = r55485 + r55489;
        return r55490;
}


double f_of(float x, float y, float z) {
        float r55491 = x;
        float r55492 = y;
        float r55493 = r55491 * r55492;
        float r55494 = 1.0;
        float r55495 = r55494 - r55491;
        float r55496 = z;
        float r55497 = r55495 * r55496;
        float r55498 = r55493 + r55497;
        return r55498;
}

double f_od(double x, double y, double z) {
        double r55499 = x;
        double r55500 = y;
        double r55501 = r55499 * r55500;
        double r55502 = 1.0;
        double r55503 = r55502 - r55499;
        double r55504 = z;
        double r55505 = r55503 * r55504;
        double r55506 = r55501 + r55505;
        return r55506;
}

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 r55507, r55508, r55509, r55510, r55511, r55512, r55513, r55514;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r55507);
        mpfr_init(r55508);
        mpfr_init(r55509);
        mpfr_init_set_str(r55510, "1.0", 10, MPFR_RNDN);
        mpfr_init(r55511);
        mpfr_init(r55512);
        mpfr_init(r55513);
        mpfr_init(r55514);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r55507, x, MPFR_RNDN);
        mpfr_set_d(r55508, y, MPFR_RNDN);
        mpfr_mul(r55509, r55507, r55508, MPFR_RNDN);
        ;
        mpfr_sub(r55511, r55510, r55507, MPFR_RNDN);
        mpfr_set_d(r55512, z, MPFR_RNDN);
        mpfr_mul(r55513, r55511, r55512, MPFR_RNDN);
        mpfr_add(r55514, r55509, r55513, MPFR_RNDN);
        return mpfr_get_d(r55514, MPFR_RNDN);
}

static mpfr_t r55515, r55516, r55517, r55518, r55519, r55520, r55521, r55522;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r55515);
        mpfr_init(r55516);
        mpfr_init(r55517);
        mpfr_init_set_str(r55518, "1.0", 10, MPFR_RNDN);
        mpfr_init(r55519);
        mpfr_init(r55520);
        mpfr_init(r55521);
        mpfr_init(r55522);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r55515, x, MPFR_RNDN);
        mpfr_set_d(r55516, y, MPFR_RNDN);
        mpfr_mul(r55517, r55515, r55516, MPFR_RNDN);
        ;
        mpfr_sub(r55519, r55518, r55515, MPFR_RNDN);
        mpfr_set_d(r55520, z, MPFR_RNDN);
        mpfr_mul(r55521, r55519, r55520, MPFR_RNDN);
        mpfr_add(r55522, r55517, r55521, MPFR_RNDN);
        return mpfr_get_d(r55522, MPFR_RNDN);
}

static mpfr_t r55523, r55524, r55525, r55526, r55527, r55528, r55529, r55530;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r55523);
        mpfr_init(r55524);
        mpfr_init(r55525);
        mpfr_init_set_str(r55526, "1.0", 10, MPFR_RNDN);
        mpfr_init(r55527);
        mpfr_init(r55528);
        mpfr_init(r55529);
        mpfr_init(r55530);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r55523, x, MPFR_RNDN);
        mpfr_set_d(r55524, y, MPFR_RNDN);
        mpfr_mul(r55525, r55523, r55524, MPFR_RNDN);
        ;
        mpfr_sub(r55527, r55526, r55523, MPFR_RNDN);
        mpfr_set_d(r55528, z, MPFR_RNDN);
        mpfr_mul(r55529, r55527, r55528, MPFR_RNDN);
        mpfr_add(r55530, r55525, r55529, MPFR_RNDN);
        return mpfr_get_d(r55530, MPFR_RNDN);
}

