#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 r50021 = x;
        float r50022 = y;
        float r50023 = r50021 * r50022;
        float r50024 = 1.0;
        float r50025 = r50021 - r50024;
        float r50026 = z;
        float r50027 = r50025 * r50026;
        float r50028 = r50023 + r50027;
        return r50028;
}

double f_id(double x, double y, double z) {
        double r50029 = x;
        double r50030 = y;
        double r50031 = r50029 * r50030;
        double r50032 = 1.0;
        double r50033 = r50029 - r50032;
        double r50034 = z;
        double r50035 = r50033 * r50034;
        double r50036 = r50031 + r50035;
        return r50036;
}


double f_of(float x, float y, float z) {
        float r50037 = x;
        float r50038 = y;
        float r50039 = r50037 * r50038;
        float r50040 = 1.0;
        float r50041 = r50037 - r50040;
        float r50042 = z;
        float r50043 = r50041 * r50042;
        float r50044 = r50039 + r50043;
        return r50044;
}

double f_od(double x, double y, double z) {
        double r50045 = x;
        double r50046 = y;
        double r50047 = r50045 * r50046;
        double r50048 = 1.0;
        double r50049 = r50045 - r50048;
        double r50050 = z;
        double r50051 = r50049 * r50050;
        double r50052 = r50047 + r50051;
        return r50052;
}

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 r50053, r50054, r50055, r50056, r50057, r50058, r50059, r50060;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r50053);
        mpfr_init(r50054);
        mpfr_init(r50055);
        mpfr_init_set_str(r50056, "1.0", 10, MPFR_RNDN);
        mpfr_init(r50057);
        mpfr_init(r50058);
        mpfr_init(r50059);
        mpfr_init(r50060);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r50053, x, MPFR_RNDN);
        mpfr_set_d(r50054, y, MPFR_RNDN);
        mpfr_mul(r50055, r50053, r50054, MPFR_RNDN);
        ;
        mpfr_sub(r50057, r50053, r50056, MPFR_RNDN);
        mpfr_set_d(r50058, z, MPFR_RNDN);
        mpfr_mul(r50059, r50057, r50058, MPFR_RNDN);
        mpfr_add(r50060, r50055, r50059, MPFR_RNDN);
        return mpfr_get_d(r50060, MPFR_RNDN);
}

static mpfr_t r50061, r50062, r50063, r50064, r50065, r50066, r50067, r50068;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r50061);
        mpfr_init(r50062);
        mpfr_init(r50063);
        mpfr_init_set_str(r50064, "1.0", 10, MPFR_RNDN);
        mpfr_init(r50065);
        mpfr_init(r50066);
        mpfr_init(r50067);
        mpfr_init(r50068);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r50061, x, MPFR_RNDN);
        mpfr_set_d(r50062, y, MPFR_RNDN);
        mpfr_mul(r50063, r50061, r50062, MPFR_RNDN);
        ;
        mpfr_sub(r50065, r50061, r50064, MPFR_RNDN);
        mpfr_set_d(r50066, z, MPFR_RNDN);
        mpfr_mul(r50067, r50065, r50066, MPFR_RNDN);
        mpfr_add(r50068, r50063, r50067, MPFR_RNDN);
        return mpfr_get_d(r50068, MPFR_RNDN);
}

static mpfr_t r50069, r50070, r50071, r50072, r50073, r50074, r50075, r50076;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r50069);
        mpfr_init(r50070);
        mpfr_init(r50071);
        mpfr_init_set_str(r50072, "1.0", 10, MPFR_RNDN);
        mpfr_init(r50073);
        mpfr_init(r50074);
        mpfr_init(r50075);
        mpfr_init(r50076);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r50069, x, MPFR_RNDN);
        mpfr_set_d(r50070, y, MPFR_RNDN);
        mpfr_mul(r50071, r50069, r50070, MPFR_RNDN);
        ;
        mpfr_sub(r50073, r50069, r50072, MPFR_RNDN);
        mpfr_set_d(r50074, z, MPFR_RNDN);
        mpfr_mul(r50075, r50073, r50074, MPFR_RNDN);
        mpfr_add(r50076, r50071, r50075, MPFR_RNDN);
        return mpfr_get_d(r50076, MPFR_RNDN);
}

