#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 r50253 = x;
        float r50254 = y;
        float r50255 = r50253 * r50254;
        float r50256 = 1.0;
        float r50257 = r50253 - r50256;
        float r50258 = z;
        float r50259 = r50257 * r50258;
        float r50260 = r50255 + r50259;
        return r50260;
}

double f_id(double x, double y, double z) {
        double r50261 = x;
        double r50262 = y;
        double r50263 = r50261 * r50262;
        double r50264 = 1.0;
        double r50265 = r50261 - r50264;
        double r50266 = z;
        double r50267 = r50265 * r50266;
        double r50268 = r50263 + r50267;
        return r50268;
}


double f_of(float x, float y, float z) {
        float r50269 = x;
        float r50270 = y;
        float r50271 = r50269 * r50270;
        float r50272 = 1.0;
        float r50273 = r50269 - r50272;
        float r50274 = z;
        float r50275 = r50273 * r50274;
        float r50276 = r50271 + r50275;
        return r50276;
}

double f_od(double x, double y, double z) {
        double r50277 = x;
        double r50278 = y;
        double r50279 = r50277 * r50278;
        double r50280 = 1.0;
        double r50281 = r50277 - r50280;
        double r50282 = z;
        double r50283 = r50281 * r50282;
        double r50284 = r50279 + r50283;
        return r50284;
}

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 r50285, r50286, r50287, r50288, r50289, r50290, r50291, r50292;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r50285);
        mpfr_init(r50286);
        mpfr_init(r50287);
        mpfr_init_set_str(r50288, "1.0", 10, MPFR_RNDN);
        mpfr_init(r50289);
        mpfr_init(r50290);
        mpfr_init(r50291);
        mpfr_init(r50292);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r50285, x, MPFR_RNDN);
        mpfr_set_d(r50286, y, MPFR_RNDN);
        mpfr_mul(r50287, r50285, r50286, MPFR_RNDN);
        ;
        mpfr_sub(r50289, r50285, r50288, MPFR_RNDN);
        mpfr_set_d(r50290, z, MPFR_RNDN);
        mpfr_mul(r50291, r50289, r50290, MPFR_RNDN);
        mpfr_add(r50292, r50287, r50291, MPFR_RNDN);
        return mpfr_get_d(r50292, MPFR_RNDN);
}

static mpfr_t r50293, r50294, r50295, r50296, r50297, r50298, r50299, r50300;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r50293);
        mpfr_init(r50294);
        mpfr_init(r50295);
        mpfr_init_set_str(r50296, "1.0", 10, MPFR_RNDN);
        mpfr_init(r50297);
        mpfr_init(r50298);
        mpfr_init(r50299);
        mpfr_init(r50300);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r50293, x, MPFR_RNDN);
        mpfr_set_d(r50294, y, MPFR_RNDN);
        mpfr_mul(r50295, r50293, r50294, MPFR_RNDN);
        ;
        mpfr_sub(r50297, r50293, r50296, MPFR_RNDN);
        mpfr_set_d(r50298, z, MPFR_RNDN);
        mpfr_mul(r50299, r50297, r50298, MPFR_RNDN);
        mpfr_add(r50300, r50295, r50299, MPFR_RNDN);
        return mpfr_get_d(r50300, MPFR_RNDN);
}

static mpfr_t r50301, r50302, r50303, r50304, r50305, r50306, r50307, r50308;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r50301);
        mpfr_init(r50302);
        mpfr_init(r50303);
        mpfr_init_set_str(r50304, "1.0", 10, MPFR_RNDN);
        mpfr_init(r50305);
        mpfr_init(r50306);
        mpfr_init(r50307);
        mpfr_init(r50308);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r50301, x, MPFR_RNDN);
        mpfr_set_d(r50302, y, MPFR_RNDN);
        mpfr_mul(r50303, r50301, r50302, MPFR_RNDN);
        ;
        mpfr_sub(r50305, r50301, r50304, MPFR_RNDN);
        mpfr_set_d(r50306, z, MPFR_RNDN);
        mpfr_mul(r50307, r50305, r50306, MPFR_RNDN);
        mpfr_add(r50308, r50303, r50307, MPFR_RNDN);
        return mpfr_get_d(r50308, MPFR_RNDN);
}

