#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 r55253 = x;
        float r55254 = y;
        float r55255 = r55253 * r55254;
        float r55256 = 1.0;
        float r55257 = r55256 - r55253;
        float r55258 = z;
        float r55259 = r55257 * r55258;
        float r55260 = r55255 + r55259;
        return r55260;
}

double f_id(double x, double y, double z) {
        double r55261 = x;
        double r55262 = y;
        double r55263 = r55261 * r55262;
        double r55264 = 1.0;
        double r55265 = r55264 - r55261;
        double r55266 = z;
        double r55267 = r55265 * r55266;
        double r55268 = r55263 + r55267;
        return r55268;
}


double f_of(float x, float y, float z) {
        float r55269 = x;
        float r55270 = y;
        float r55271 = r55269 * r55270;
        float r55272 = 1.0;
        float r55273 = r55272 - r55269;
        float r55274 = z;
        float r55275 = r55273 * r55274;
        float r55276 = r55271 + r55275;
        return r55276;
}

double f_od(double x, double y, double z) {
        double r55277 = x;
        double r55278 = y;
        double r55279 = r55277 * r55278;
        double r55280 = 1.0;
        double r55281 = r55280 - r55277;
        double r55282 = z;
        double r55283 = r55281 * r55282;
        double r55284 = r55279 + r55283;
        return r55284;
}

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 r55285, r55286, r55287, r55288, r55289, r55290, r55291, r55292;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r55285);
        mpfr_init(r55286);
        mpfr_init(r55287);
        mpfr_init_set_str(r55288, "1.0", 10, MPFR_RNDN);
        mpfr_init(r55289);
        mpfr_init(r55290);
        mpfr_init(r55291);
        mpfr_init(r55292);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r55285, x, MPFR_RNDN);
        mpfr_set_d(r55286, y, MPFR_RNDN);
        mpfr_mul(r55287, r55285, r55286, MPFR_RNDN);
        ;
        mpfr_sub(r55289, r55288, r55285, MPFR_RNDN);
        mpfr_set_d(r55290, z, MPFR_RNDN);
        mpfr_mul(r55291, r55289, r55290, MPFR_RNDN);
        mpfr_add(r55292, r55287, r55291, MPFR_RNDN);
        return mpfr_get_d(r55292, MPFR_RNDN);
}

static mpfr_t r55293, r55294, r55295, r55296, r55297, r55298, r55299, r55300;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r55293);
        mpfr_init(r55294);
        mpfr_init(r55295);
        mpfr_init_set_str(r55296, "1.0", 10, MPFR_RNDN);
        mpfr_init(r55297);
        mpfr_init(r55298);
        mpfr_init(r55299);
        mpfr_init(r55300);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r55293, x, MPFR_RNDN);
        mpfr_set_d(r55294, y, MPFR_RNDN);
        mpfr_mul(r55295, r55293, r55294, MPFR_RNDN);
        ;
        mpfr_sub(r55297, r55296, r55293, MPFR_RNDN);
        mpfr_set_d(r55298, z, MPFR_RNDN);
        mpfr_mul(r55299, r55297, r55298, MPFR_RNDN);
        mpfr_add(r55300, r55295, r55299, MPFR_RNDN);
        return mpfr_get_d(r55300, MPFR_RNDN);
}

static mpfr_t r55301, r55302, r55303, r55304, r55305, r55306, r55307, r55308;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r55301);
        mpfr_init(r55302);
        mpfr_init(r55303);
        mpfr_init_set_str(r55304, "1.0", 10, MPFR_RNDN);
        mpfr_init(r55305);
        mpfr_init(r55306);
        mpfr_init(r55307);
        mpfr_init(r55308);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r55301, x, MPFR_RNDN);
        mpfr_set_d(r55302, y, MPFR_RNDN);
        mpfr_mul(r55303, r55301, r55302, MPFR_RNDN);
        ;
        mpfr_sub(r55305, r55304, r55301, MPFR_RNDN);
        mpfr_set_d(r55306, z, MPFR_RNDN);
        mpfr_mul(r55307, r55305, r55306, MPFR_RNDN);
        mpfr_add(r55308, r55303, r55307, MPFR_RNDN);
        return mpfr_get_d(r55308, MPFR_RNDN);
}

