#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 r54042 = x;
        float r54043 = y;
        float r54044 = r54042 * r54043;
        float r54045 = 1.0f;
        float r54046 = r54045 - r54042;
        float r54047 = z;
        float r54048 = r54046 * r54047;
        float r54049 = r54044 + r54048;
        return r54049;
}

double f_id(double x, double y, double z) {
        double r54050 = x;
        double r54051 = y;
        double r54052 = r54050 * r54051;
        double r54053 = 1.0;
        double r54054 = r54053 - r54050;
        double r54055 = z;
        double r54056 = r54054 * r54055;
        double r54057 = r54052 + r54056;
        return r54057;
}


double f_of(float x, float y, float z) {
        float r54058 = x;
        float r54059 = y;
        float r54060 = r54058 * r54059;
        float r54061 = 1.0f;
        float r54062 = z;
        float r54063 = r54061 * r54062;
        float r54064 = r54058 * r54062;
        float r54065 = r54061 * r54064;
        float r54066 = r54063 - r54065;
        float r54067 = r54060 + r54066;
        return r54067;
}

double f_od(double x, double y, double z) {
        double r54068 = x;
        double r54069 = y;
        double r54070 = r54068 * r54069;
        double r54071 = 1.0;
        double r54072 = z;
        double r54073 = r54071 * r54072;
        double r54074 = r54068 * r54072;
        double r54075 = r54071 * r54074;
        double r54076 = r54073 - r54075;
        double r54077 = r54070 + r54076;
        return r54077;
}

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 r54078, r54079, r54080, r54081, r54082, r54083, r54084, r54085;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r54078);
        mpfr_init(r54079);
        mpfr_init(r54080);
        mpfr_init_set_str(r54081, "1.0", 10, MPFR_RNDN);
        mpfr_init(r54082);
        mpfr_init(r54083);
        mpfr_init(r54084);
        mpfr_init(r54085);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r54078, x, MPFR_RNDN);
        mpfr_set_d(r54079, y, MPFR_RNDN);
        mpfr_mul(r54080, r54078, r54079, MPFR_RNDN);
        ;
        mpfr_sub(r54082, r54081, r54078, MPFR_RNDN);
        mpfr_set_d(r54083, z, MPFR_RNDN);
        mpfr_mul(r54084, r54082, r54083, MPFR_RNDN);
        mpfr_add(r54085, r54080, r54084, MPFR_RNDN);
        return mpfr_get_d(r54085, MPFR_RNDN);
}

static mpfr_t r54086, r54087, r54088, r54089, r54090, r54091, r54092, r54093, r54094, r54095;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r54086);
        mpfr_init(r54087);
        mpfr_init(r54088);
        mpfr_init_set_str(r54089, "1.0", 10, MPFR_RNDN);
        mpfr_init(r54090);
        mpfr_init(r54091);
        mpfr_init(r54092);
        mpfr_init(r54093);
        mpfr_init(r54094);
        mpfr_init(r54095);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r54086, x, MPFR_RNDN);
        mpfr_set_d(r54087, y, MPFR_RNDN);
        mpfr_mul(r54088, r54086, r54087, MPFR_RNDN);
        ;
        mpfr_set_d(r54090, z, MPFR_RNDN);
        mpfr_mul(r54091, r54089, r54090, MPFR_RNDN);
        mpfr_mul(r54092, r54086, r54090, MPFR_RNDN);
        mpfr_mul(r54093, r54089, r54092, MPFR_RNDN);
        mpfr_sub(r54094, r54091, r54093, MPFR_RNDN);
        mpfr_add(r54095, r54088, r54094, MPFR_RNDN);
        return mpfr_get_d(r54095, MPFR_RNDN);
}

static mpfr_t r54096, r54097, r54098, r54099, r54100, r54101, r54102, r54103, r54104, r54105;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r54096);
        mpfr_init(r54097);
        mpfr_init(r54098);
        mpfr_init_set_str(r54099, "1.0", 10, MPFR_RNDN);
        mpfr_init(r54100);
        mpfr_init(r54101);
        mpfr_init(r54102);
        mpfr_init(r54103);
        mpfr_init(r54104);
        mpfr_init(r54105);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r54096, x, MPFR_RNDN);
        mpfr_set_d(r54097, y, MPFR_RNDN);
        mpfr_mul(r54098, r54096, r54097, MPFR_RNDN);
        ;
        mpfr_set_d(r54100, z, MPFR_RNDN);
        mpfr_mul(r54101, r54099, r54100, MPFR_RNDN);
        mpfr_mul(r54102, r54096, r54100, MPFR_RNDN);
        mpfr_mul(r54103, r54099, r54102, MPFR_RNDN);
        mpfr_sub(r54104, r54101, r54103, MPFR_RNDN);
        mpfr_add(r54105, r54098, r54104, MPFR_RNDN);
        return mpfr_get_d(r54105, MPFR_RNDN);
}

