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

char *name = "Graphics.Rendering.Chart.Backend.Diagrams:calcFontMetrics from Chart-diagrams-1.5.1, A";

double f_if(float x, float y, float z) {
        float r50380 = x;
        float r50381 = y;
        float r50382 = r50380 + r50381;
        float r50383 = 1.0;
        float r50384 = z;
        float r50385 = r50381 / r50384;
        float r50386 = r50383 - r50385;
        float r50387 = r50382 / r50386;
        return r50387;
}

double f_id(double x, double y, double z) {
        double r50388 = x;
        double r50389 = y;
        double r50390 = r50388 + r50389;
        double r50391 = 1.0;
        double r50392 = z;
        double r50393 = r50389 / r50392;
        double r50394 = r50391 - r50393;
        double r50395 = r50390 / r50394;
        return r50395;
}


double f_of(float x, float y, float z) {
        float r50396 = x;
        float r50397 = y;
        float r50398 = r50396 + r50397;
        float r50399 = 1.0;
        float r50400 = z;
        float r50401 = r50397 / r50400;
        float r50402 = r50399 - r50401;
        float r50403 = r50398 / r50402;
        return r50403;
}

double f_od(double x, double y, double z) {
        double r50404 = x;
        double r50405 = y;
        double r50406 = r50404 + r50405;
        double r50407 = 1.0;
        double r50408 = z;
        double r50409 = r50405 / r50408;
        double r50410 = r50407 - r50409;
        double r50411 = r50406 / r50410;
        return r50411;
}

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 r50412, r50413, r50414, r50415, r50416, r50417, r50418, r50419;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r50412);
        mpfr_init(r50413);
        mpfr_init(r50414);
        mpfr_init_set_str(r50415, "1.0", 10, MPFR_RNDN);
        mpfr_init(r50416);
        mpfr_init(r50417);
        mpfr_init(r50418);
        mpfr_init(r50419);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r50412, x, MPFR_RNDN);
        mpfr_set_d(r50413, y, MPFR_RNDN);
        mpfr_add(r50414, r50412, r50413, MPFR_RNDN);
        ;
        mpfr_set_d(r50416, z, MPFR_RNDN);
        mpfr_div(r50417, r50413, r50416, MPFR_RNDN);
        mpfr_sub(r50418, r50415, r50417, MPFR_RNDN);
        mpfr_div(r50419, r50414, r50418, MPFR_RNDN);
        return mpfr_get_d(r50419, MPFR_RNDN);
}

static mpfr_t r50420, r50421, r50422, r50423, r50424, r50425, r50426, r50427;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r50420);
        mpfr_init(r50421);
        mpfr_init(r50422);
        mpfr_init_set_str(r50423, "1.0", 10, MPFR_RNDN);
        mpfr_init(r50424);
        mpfr_init(r50425);
        mpfr_init(r50426);
        mpfr_init(r50427);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r50420, x, MPFR_RNDN);
        mpfr_set_d(r50421, y, MPFR_RNDN);
        mpfr_add(r50422, r50420, r50421, MPFR_RNDN);
        ;
        mpfr_set_d(r50424, z, MPFR_RNDN);
        mpfr_div(r50425, r50421, r50424, MPFR_RNDN);
        mpfr_sub(r50426, r50423, r50425, MPFR_RNDN);
        mpfr_div(r50427, r50422, r50426, MPFR_RNDN);
        return mpfr_get_d(r50427, MPFR_RNDN);
}

static mpfr_t r50428, r50429, r50430, r50431, r50432, r50433, r50434, r50435;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r50428);
        mpfr_init(r50429);
        mpfr_init(r50430);
        mpfr_init_set_str(r50431, "1.0", 10, MPFR_RNDN);
        mpfr_init(r50432);
        mpfr_init(r50433);
        mpfr_init(r50434);
        mpfr_init(r50435);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r50428, x, MPFR_RNDN);
        mpfr_set_d(r50429, y, MPFR_RNDN);
        mpfr_add(r50430, r50428, r50429, MPFR_RNDN);
        ;
        mpfr_set_d(r50432, z, MPFR_RNDN);
        mpfr_div(r50433, r50429, r50432, MPFR_RNDN);
        mpfr_sub(r50434, r50431, r50433, MPFR_RNDN);
        mpfr_div(r50435, r50430, r50434, MPFR_RNDN);
        return mpfr_get_d(r50435, MPFR_RNDN);
}

