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

char *name = "Graphics.Rendering.Chart.Drawing:drawTextsR from Chart-1.5.3";

double f_if(float x, float y, float z) {
        float r50228 = x;
        float r50229 = y;
        float r50230 = r50228 * r50229;
        float r50231 = 1.0;
        float r50232 = r50228 - r50231;
        float r50233 = z;
        float r50234 = r50232 * r50233;
        float r50235 = r50230 + r50234;
        return r50235;
}

double f_id(double x, double y, double z) {
        double r50236 = x;
        double r50237 = y;
        double r50238 = r50236 * r50237;
        double r50239 = 1.0;
        double r50240 = r50236 - r50239;
        double r50241 = z;
        double r50242 = r50240 * r50241;
        double r50243 = r50238 + r50242;
        return r50243;
}


double f_of(float x, float y, float z) {
        float r50244 = x;
        float r50245 = y;
        float r50246 = r50244 * r50245;
        float r50247 = 1.0;
        float r50248 = r50244 - r50247;
        float r50249 = z;
        float r50250 = r50248 * r50249;
        float r50251 = r50246 + r50250;
        return r50251;
}

double f_od(double x, double y, double z) {
        double r50252 = x;
        double r50253 = y;
        double r50254 = r50252 * r50253;
        double r50255 = 1.0;
        double r50256 = r50252 - r50255;
        double r50257 = z;
        double r50258 = r50256 * r50257;
        double r50259 = r50254 + r50258;
        return r50259;
}

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 r50260, r50261, r50262, r50263, r50264, r50265, r50266, r50267;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r50260);
        mpfr_init(r50261);
        mpfr_init(r50262);
        mpfr_init_set_str(r50263, "1.0", 10, MPFR_RNDN);
        mpfr_init(r50264);
        mpfr_init(r50265);
        mpfr_init(r50266);
        mpfr_init(r50267);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r50260, x, MPFR_RNDN);
        mpfr_set_d(r50261, y, MPFR_RNDN);
        mpfr_mul(r50262, r50260, r50261, MPFR_RNDN);
        ;
        mpfr_sub(r50264, r50260, r50263, MPFR_RNDN);
        mpfr_set_d(r50265, z, MPFR_RNDN);
        mpfr_mul(r50266, r50264, r50265, MPFR_RNDN);
        mpfr_add(r50267, r50262, r50266, MPFR_RNDN);
        return mpfr_get_d(r50267, MPFR_RNDN);
}

static mpfr_t r50268, r50269, r50270, r50271, r50272, r50273, r50274, r50275;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r50268);
        mpfr_init(r50269);
        mpfr_init(r50270);
        mpfr_init_set_str(r50271, "1.0", 10, MPFR_RNDN);
        mpfr_init(r50272);
        mpfr_init(r50273);
        mpfr_init(r50274);
        mpfr_init(r50275);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r50268, x, MPFR_RNDN);
        mpfr_set_d(r50269, y, MPFR_RNDN);
        mpfr_mul(r50270, r50268, r50269, MPFR_RNDN);
        ;
        mpfr_sub(r50272, r50268, r50271, MPFR_RNDN);
        mpfr_set_d(r50273, z, MPFR_RNDN);
        mpfr_mul(r50274, r50272, r50273, MPFR_RNDN);
        mpfr_add(r50275, r50270, r50274, MPFR_RNDN);
        return mpfr_get_d(r50275, MPFR_RNDN);
}

static mpfr_t r50276, r50277, r50278, r50279, r50280, r50281, r50282, r50283;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r50276);
        mpfr_init(r50277);
        mpfr_init(r50278);
        mpfr_init_set_str(r50279, "1.0", 10, MPFR_RNDN);
        mpfr_init(r50280);
        mpfr_init(r50281);
        mpfr_init(r50282);
        mpfr_init(r50283);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r50276, x, MPFR_RNDN);
        mpfr_set_d(r50277, y, MPFR_RNDN);
        mpfr_mul(r50278, r50276, r50277, MPFR_RNDN);
        ;
        mpfr_sub(r50280, r50276, r50279, MPFR_RNDN);
        mpfr_set_d(r50281, z, MPFR_RNDN);
        mpfr_mul(r50282, r50280, r50281, MPFR_RNDN);
        mpfr_add(r50283, r50278, r50282, MPFR_RNDN);
        return mpfr_get_d(r50283, MPFR_RNDN);
}

