#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";

double f_if(float x, float y, float z, float t) {
        float r17954 = x;
        float r17955 = y;
        float r17956 = z;
        float r17957 = r17955 / r17956;
        float r17958 = t;
        float r17959 = r17957 * r17958;
        float r17960 = r17959 / r17958;
        float r17961 = r17954 * r17960;
        return r17961;
}

double f_id(double x, double y, double z, double t) {
        double r17962 = x;
        double r17963 = y;
        double r17964 = z;
        double r17965 = r17963 / r17964;
        double r17966 = t;
        double r17967 = r17965 * r17966;
        double r17968 = r17967 / r17966;
        double r17969 = r17962 * r17968;
        return r17969;
}


double f_of(float x, float y, float z, float __attribute__((unused)) t) {
        float r17970 = y;
        float r17971 = z;
        float r17972 = x;
        float r17973 = r17971 / r17972;
        float r17974 = r17970 / r17973;
        float r17975 = cbrt(r17974);
        float r17976 = r17975 * (r17975 * r17975);
        return r17976;
}

double f_od(double x, double y, double z, double __attribute__((unused)) t) {
        double r17977 = y;
        double r17978 = z;
        double r17979 = x;
        double r17980 = r17978 / r17979;
        double r17981 = r17977 / r17980;
        double r17982 = cbrt(r17981);
        double r17983 = r17982 * (r17982 * r17982);
        return r17983;
}

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 r17984, r17985, r17986, r17987, r17988, r17989, r17990, r17991;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r17984);
        mpfr_init(r17985);
        mpfr_init(r17986);
        mpfr_init(r17987);
        mpfr_init(r17988);
        mpfr_init(r17989);
        mpfr_init(r17990);
        mpfr_init(r17991);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r17984, x, MPFR_RNDN);
        mpfr_set_d(r17985, y, MPFR_RNDN);
        mpfr_set_d(r17986, z, MPFR_RNDN);
        mpfr_div(r17987, r17985, r17986, MPFR_RNDN);
        mpfr_set_d(r17988, t, MPFR_RNDN);
        mpfr_mul(r17989, r17987, r17988, MPFR_RNDN);
        mpfr_div(r17990, r17989, r17988, MPFR_RNDN);
        mpfr_mul(r17991, r17984, r17990, MPFR_RNDN);
        return mpfr_get_d(r17991, MPFR_RNDN);
}

static mpfr_t r17992, r17993, r17994, r17995, r17996, r17997, r17998;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r17992);
        mpfr_init(r17993);
        mpfr_init(r17994);
        mpfr_init(r17995);
        mpfr_init(r17996);
        mpfr_init(r17997);
        mpfr_init(r17998);
}

double f_fm(double x, double y, double z, double __attribute__((unused)) t) {
        mpfr_set_d(r17992, y, MPFR_RNDN);
        mpfr_set_d(r17993, z, MPFR_RNDN);
        mpfr_set_d(r17994, x, MPFR_RNDN);
        mpfr_div(r17995, r17993, r17994, MPFR_RNDN);
        mpfr_div(r17996, r17992, r17995, MPFR_RNDN);
        mpfr_cbrt(r17997, r17996, MPFR_RNDN);
        mpfr_mul(r17998, r17997, r17997, MPFR_RNDN); mpfr_mul(r17998, r17998, r17997, MPFR_RNDN);
        return mpfr_get_d(r17998, MPFR_RNDN);
}

static mpfr_t r17999, r18000, r18001, r18002, r18003, r18004, r18005;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r17999);
        mpfr_init(r18000);
        mpfr_init(r18001);
        mpfr_init(r18002);
        mpfr_init(r18003);
        mpfr_init(r18004);
        mpfr_init(r18005);
}

double f_dm(double x, double y, double z, double __attribute__((unused)) t) {
        mpfr_set_d(r17999, y, MPFR_RNDN);
        mpfr_set_d(r18000, z, MPFR_RNDN);
        mpfr_set_d(r18001, x, MPFR_RNDN);
        mpfr_div(r18002, r18000, r18001, MPFR_RNDN);
        mpfr_div(r18003, r17999, r18002, MPFR_RNDN);
        mpfr_cbrt(r18004, r18003, MPFR_RNDN);
        mpfr_mul(r18005, r18004, r18004, MPFR_RNDN); mpfr_mul(r18005, r18005, r18004, MPFR_RNDN);
        return mpfr_get_d(r18005, MPFR_RNDN);
}

