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

char *name = "Linear.Projection:infinitePerspective from linear-1.19.1.3, A";

double f_if(float x, float y, float z, float t) {
        float r47934 = x;
        float r47935 = 2.0;
        float r47936 = r47934 * r47935;
        float r47937 = y;
        float r47938 = z;
        float r47939 = r47937 * r47938;
        float r47940 = t;
        float r47941 = r47940 * r47938;
        float r47942 = r47939 - r47941;
        float r47943 = r47936 / r47942;
        return r47943;
}

double f_id(double x, double y, double z, double t) {
        double r47944 = x;
        double r47945 = 2.0;
        double r47946 = r47944 * r47945;
        double r47947 = y;
        double r47948 = z;
        double r47949 = r47947 * r47948;
        double r47950 = t;
        double r47951 = r47950 * r47948;
        double r47952 = r47949 - r47951;
        double r47953 = r47946 / r47952;
        return r47953;
}


double f_of(float x, float y, float z, float t) {
        float r47954 = x;
        float r47955 = 2.0;
        float r47956 = z;
        float r47957 = r47955 / r47956;
        float r47958 = cbrt(r47957);
        float r47959 = r47958 * r47958;
        float r47960 = y;
        float r47961 = t;
        float r47962 = r47960 - r47961;
        float r47963 = cbrt(r47962);
        float r47964 = r47963 * r47963;
        float r47965 = r47959 / r47964;
        float r47966 = r47954 * r47965;
        float r47967 = r47958 / r47963;
        float r47968 = r47966 * r47967;
        return r47968;
}

double f_od(double x, double y, double z, double t) {
        double r47969 = x;
        double r47970 = 2.0;
        double r47971 = z;
        double r47972 = r47970 / r47971;
        double r47973 = cbrt(r47972);
        double r47974 = r47973 * r47973;
        double r47975 = y;
        double r47976 = t;
        double r47977 = r47975 - r47976;
        double r47978 = cbrt(r47977);
        double r47979 = r47978 * r47978;
        double r47980 = r47974 / r47979;
        double r47981 = r47969 * r47980;
        double r47982 = r47973 / r47978;
        double r47983 = r47981 * r47982;
        return r47983;
}

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 r47984, r47985, r47986, r47987, r47988, r47989, r47990, r47991, r47992, r47993;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r47984);
        mpfr_init_set_str(r47985, "2.0", 10, MPFR_RNDN);
        mpfr_init(r47986);
        mpfr_init(r47987);
        mpfr_init(r47988);
        mpfr_init(r47989);
        mpfr_init(r47990);
        mpfr_init(r47991);
        mpfr_init(r47992);
        mpfr_init(r47993);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r47984, x, MPFR_RNDN);
        ;
        mpfr_mul(r47986, r47984, r47985, MPFR_RNDN);
        mpfr_set_d(r47987, y, MPFR_RNDN);
        mpfr_set_d(r47988, z, MPFR_RNDN);
        mpfr_mul(r47989, r47987, r47988, MPFR_RNDN);
        mpfr_set_d(r47990, t, MPFR_RNDN);
        mpfr_mul(r47991, r47990, r47988, MPFR_RNDN);
        mpfr_sub(r47992, r47989, r47991, MPFR_RNDN);
        mpfr_div(r47993, r47986, r47992, MPFR_RNDN);
        return mpfr_get_d(r47993, MPFR_RNDN);
}

static mpfr_t r47994, r47995, r47996, r47997, r47998, r47999, r48000, r48001, r48002, r48003, r48004, r48005, r48006, r48007, r48008;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47994);
        mpfr_init_set_str(r47995, "2.0", 10, MPFR_RNDN);
        mpfr_init(r47996);
        mpfr_init(r47997);
        mpfr_init(r47998);
        mpfr_init(r47999);
        mpfr_init(r48000);
        mpfr_init(r48001);
        mpfr_init(r48002);
        mpfr_init(r48003);
        mpfr_init(r48004);
        mpfr_init(r48005);
        mpfr_init(r48006);
        mpfr_init(r48007);
        mpfr_init(r48008);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r47994, x, MPFR_RNDN);
        ;
        mpfr_set_d(r47996, z, MPFR_RNDN);
        mpfr_div(r47997, r47995, r47996, MPFR_RNDN);
        mpfr_cbrt(r47998, r47997, MPFR_RNDN);
        mpfr_mul(r47999, r47998, r47998, MPFR_RNDN);
        mpfr_set_d(r48000, y, MPFR_RNDN);
        mpfr_set_d(r48001, t, MPFR_RNDN);
        mpfr_sub(r48002, r48000, r48001, MPFR_RNDN);
        mpfr_cbrt(r48003, r48002, MPFR_RNDN);
        mpfr_mul(r48004, r48003, r48003, MPFR_RNDN);
        mpfr_div(r48005, r47999, r48004, MPFR_RNDN);
        mpfr_mul(r48006, r47994, r48005, MPFR_RNDN);
        mpfr_div(r48007, r47998, r48003, MPFR_RNDN);
        mpfr_mul(r48008, r48006, r48007, MPFR_RNDN);
        return mpfr_get_d(r48008, MPFR_RNDN);
}

static mpfr_t r48009, r48010, r48011, r48012, r48013, r48014, r48015, r48016, r48017, r48018, r48019, r48020, r48021, r48022, r48023;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r48009);
        mpfr_init_set_str(r48010, "2.0", 10, MPFR_RNDN);
        mpfr_init(r48011);
        mpfr_init(r48012);
        mpfr_init(r48013);
        mpfr_init(r48014);
        mpfr_init(r48015);
        mpfr_init(r48016);
        mpfr_init(r48017);
        mpfr_init(r48018);
        mpfr_init(r48019);
        mpfr_init(r48020);
        mpfr_init(r48021);
        mpfr_init(r48022);
        mpfr_init(r48023);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r48009, x, MPFR_RNDN);
        ;
        mpfr_set_d(r48011, z, MPFR_RNDN);
        mpfr_div(r48012, r48010, r48011, MPFR_RNDN);
        mpfr_cbrt(r48013, r48012, MPFR_RNDN);
        mpfr_mul(r48014, r48013, r48013, MPFR_RNDN);
        mpfr_set_d(r48015, y, MPFR_RNDN);
        mpfr_set_d(r48016, t, MPFR_RNDN);
        mpfr_sub(r48017, r48015, r48016, MPFR_RNDN);
        mpfr_cbrt(r48018, r48017, MPFR_RNDN);
        mpfr_mul(r48019, r48018, r48018, MPFR_RNDN);
        mpfr_div(r48020, r48014, r48019, MPFR_RNDN);
        mpfr_mul(r48021, r48009, r48020, MPFR_RNDN);
        mpfr_div(r48022, r48013, r48018, MPFR_RNDN);
        mpfr_mul(r48023, r48021, r48022, MPFR_RNDN);
        return mpfr_get_d(r48023, MPFR_RNDN);
}

