#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 r49639 = x;
        float r49640 = y;
        float r49641 = r49639 + r49640;
        float r49642 = 1.0;
        float r49643 = z;
        float r49644 = r49640 / r49643;
        float r49645 = r49642 - r49644;
        float r49646 = r49641 / r49645;
        return r49646;
}

double f_id(double x, double y, double z) {
        double r49647 = x;
        double r49648 = y;
        double r49649 = r49647 + r49648;
        double r49650 = 1.0;
        double r49651 = z;
        double r49652 = r49648 / r49651;
        double r49653 = r49650 - r49652;
        double r49654 = r49649 / r49653;
        return r49654;
}


double f_of(float x, float y, float z) {
        float r49655 = x;
        float r49656 = y;
        float r49657 = r49655 + r49656;
        float r49658 = 1.0;
        float r49659 = z;
        float r49660 = r49656 / r49659;
        float r49661 = r49658 - r49660;
        float r49662 = r49657 / r49661;
        return r49662;
}

double f_od(double x, double y, double z) {
        double r49663 = x;
        double r49664 = y;
        double r49665 = r49663 + r49664;
        double r49666 = 1.0;
        double r49667 = z;
        double r49668 = r49664 / r49667;
        double r49669 = r49666 - r49668;
        double r49670 = r49665 / r49669;
        return r49670;
}

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 r49671, r49672, r49673, r49674, r49675, r49676, r49677, r49678;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r49671);
        mpfr_init(r49672);
        mpfr_init(r49673);
        mpfr_init_set_str(r49674, "1.0", 10, MPFR_RNDN);
        mpfr_init(r49675);
        mpfr_init(r49676);
        mpfr_init(r49677);
        mpfr_init(r49678);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r49671, x, MPFR_RNDN);
        mpfr_set_d(r49672, y, MPFR_RNDN);
        mpfr_add(r49673, r49671, r49672, MPFR_RNDN);
        ;
        mpfr_set_d(r49675, z, MPFR_RNDN);
        mpfr_div(r49676, r49672, r49675, MPFR_RNDN);
        mpfr_sub(r49677, r49674, r49676, MPFR_RNDN);
        mpfr_div(r49678, r49673, r49677, MPFR_RNDN);
        return mpfr_get_d(r49678, MPFR_RNDN);
}

static mpfr_t r49679, r49680, r49681, r49682, r49683, r49684, r49685, r49686;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r49679);
        mpfr_init(r49680);
        mpfr_init(r49681);
        mpfr_init_set_str(r49682, "1.0", 10, MPFR_RNDN);
        mpfr_init(r49683);
        mpfr_init(r49684);
        mpfr_init(r49685);
        mpfr_init(r49686);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r49679, x, MPFR_RNDN);
        mpfr_set_d(r49680, y, MPFR_RNDN);
        mpfr_add(r49681, r49679, r49680, MPFR_RNDN);
        ;
        mpfr_set_d(r49683, z, MPFR_RNDN);
        mpfr_div(r49684, r49680, r49683, MPFR_RNDN);
        mpfr_sub(r49685, r49682, r49684, MPFR_RNDN);
        mpfr_div(r49686, r49681, r49685, MPFR_RNDN);
        return mpfr_get_d(r49686, MPFR_RNDN);
}

static mpfr_t r49687, r49688, r49689, r49690, r49691, r49692, r49693, r49694;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r49687);
        mpfr_init(r49688);
        mpfr_init(r49689);
        mpfr_init_set_str(r49690, "1.0", 10, MPFR_RNDN);
        mpfr_init(r49691);
        mpfr_init(r49692);
        mpfr_init(r49693);
        mpfr_init(r49694);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r49687, x, MPFR_RNDN);
        mpfr_set_d(r49688, y, MPFR_RNDN);
        mpfr_add(r49689, r49687, r49688, MPFR_RNDN);
        ;
        mpfr_set_d(r49691, z, MPFR_RNDN);
        mpfr_div(r49692, r49688, r49691, MPFR_RNDN);
        mpfr_sub(r49693, r49690, r49692, MPFR_RNDN);
        mpfr_div(r49694, r49689, r49693, MPFR_RNDN);
        return mpfr_get_d(r49694, MPFR_RNDN);
}

