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

char *name = "Diagrams.Solve.Polynomial:cubForm  from diagrams-solve-0.1, H";

double f_if(float x, float y, float z, float t) {
        float r52990 = x;
        float r52991 = y;
        float r52992 = z;
        float r52993 = 3.0f;
        float r52994 = r52992 * r52993;
        float r52995 = r52991 / r52994;
        float r52996 = r52990 - r52995;
        float r52997 = t;
        float r52998 = r52994 * r52991;
        float r52999 = r52997 / r52998;
        float r53000 = r52996 + r52999;
        return r53000;
}

double f_id(double x, double y, double z, double t) {
        double r53001 = x;
        double r53002 = y;
        double r53003 = z;
        double r53004 = 3.0;
        double r53005 = r53003 * r53004;
        double r53006 = r53002 / r53005;
        double r53007 = r53001 - r53006;
        double r53008 = t;
        double r53009 = r53005 * r53002;
        double r53010 = r53008 / r53009;
        double r53011 = r53007 + r53010;
        return r53011;
}


double f_of(float x, float y, float z, float t) {
        float r53012 = x;
        float r53013 = y;
        float r53014 = z;
        float r53015 = 3.0f;
        float r53016 = r53014 * r53015;
        float r53017 = r53013 / r53016;
        float r53018 = r53012 - r53017;
        float r53019 = 1.0f;
        float r53020 = t;
        float r53021 = r53020 / r53016;
        float r53022 = r53013 / r53021;
        float r53023 = r53019 / r53022;
        float r53024 = r53018 + r53023;
        return r53024;
}

double f_od(double x, double y, double z, double t) {
        double r53025 = x;
        double r53026 = y;
        double r53027 = z;
        double r53028 = 3.0;
        double r53029 = r53027 * r53028;
        double r53030 = r53026 / r53029;
        double r53031 = r53025 - r53030;
        double r53032 = 1.0;
        double r53033 = t;
        double r53034 = r53033 / r53029;
        double r53035 = r53026 / r53034;
        double r53036 = r53032 / r53035;
        double r53037 = r53031 + r53036;
        return r53037;
}

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 r53038, r53039, r53040, r53041, r53042, r53043, r53044, r53045, r53046, r53047, r53048;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r53038);
        mpfr_init(r53039);
        mpfr_init(r53040);
        mpfr_init_set_str(r53041, "3.0", 10, MPFR_RNDN);
        mpfr_init(r53042);
        mpfr_init(r53043);
        mpfr_init(r53044);
        mpfr_init(r53045);
        mpfr_init(r53046);
        mpfr_init(r53047);
        mpfr_init(r53048);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r53038, x, MPFR_RNDN);
        mpfr_set_d(r53039, y, MPFR_RNDN);
        mpfr_set_d(r53040, z, MPFR_RNDN);
        ;
        mpfr_mul(r53042, r53040, r53041, MPFR_RNDN);
        mpfr_div(r53043, r53039, r53042, MPFR_RNDN);
        mpfr_sub(r53044, r53038, r53043, MPFR_RNDN);
        mpfr_set_d(r53045, t, MPFR_RNDN);
        mpfr_mul(r53046, r53042, r53039, MPFR_RNDN);
        mpfr_div(r53047, r53045, r53046, MPFR_RNDN);
        mpfr_add(r53048, r53044, r53047, MPFR_RNDN);
        return mpfr_get_d(r53048, MPFR_RNDN);
}

static mpfr_t r53049, r53050, r53051, r53052, r53053, r53054, r53055, r53056, r53057, r53058, r53059, r53060, r53061;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r53049);
        mpfr_init(r53050);
        mpfr_init(r53051);
        mpfr_init_set_str(r53052, "3.0", 10, MPFR_RNDN);
        mpfr_init(r53053);
        mpfr_init(r53054);
        mpfr_init(r53055);
        mpfr_init_set_str(r53056, "1", 10, MPFR_RNDN);
        mpfr_init(r53057);
        mpfr_init(r53058);
        mpfr_init(r53059);
        mpfr_init(r53060);
        mpfr_init(r53061);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r53049, x, MPFR_RNDN);
        mpfr_set_d(r53050, y, MPFR_RNDN);
        mpfr_set_d(r53051, z, MPFR_RNDN);
        ;
        mpfr_mul(r53053, r53051, r53052, MPFR_RNDN);
        mpfr_div(r53054, r53050, r53053, MPFR_RNDN);
        mpfr_sub(r53055, r53049, r53054, MPFR_RNDN);
        ;
        mpfr_set_d(r53057, t, MPFR_RNDN);
        mpfr_div(r53058, r53057, r53053, MPFR_RNDN);
        mpfr_div(r53059, r53050, r53058, MPFR_RNDN);
        mpfr_div(r53060, r53056, r53059, MPFR_RNDN);
        mpfr_add(r53061, r53055, r53060, MPFR_RNDN);
        return mpfr_get_d(r53061, MPFR_RNDN);
}

static mpfr_t r53062, r53063, r53064, r53065, r53066, r53067, r53068, r53069, r53070, r53071, r53072, r53073, r53074;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r53062);
        mpfr_init(r53063);
        mpfr_init(r53064);
        mpfr_init_set_str(r53065, "3.0", 10, MPFR_RNDN);
        mpfr_init(r53066);
        mpfr_init(r53067);
        mpfr_init(r53068);
        mpfr_init_set_str(r53069, "1", 10, MPFR_RNDN);
        mpfr_init(r53070);
        mpfr_init(r53071);
        mpfr_init(r53072);
        mpfr_init(r53073);
        mpfr_init(r53074);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r53062, x, MPFR_RNDN);
        mpfr_set_d(r53063, y, MPFR_RNDN);
        mpfr_set_d(r53064, z, MPFR_RNDN);
        ;
        mpfr_mul(r53066, r53064, r53065, MPFR_RNDN);
        mpfr_div(r53067, r53063, r53066, MPFR_RNDN);
        mpfr_sub(r53068, r53062, r53067, MPFR_RNDN);
        ;
        mpfr_set_d(r53070, t, MPFR_RNDN);
        mpfr_div(r53071, r53070, r53066, MPFR_RNDN);
        mpfr_div(r53072, r53063, r53071, MPFR_RNDN);
        mpfr_div(r53073, r53069, r53072, MPFR_RNDN);
        mpfr_add(r53074, r53068, r53073, MPFR_RNDN);
        return mpfr_get_d(r53074, MPFR_RNDN);
}

