#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 r47953 = x;
        float r47954 = 2.0;
        float r47955 = r47953 * r47954;
        float r47956 = y;
        float r47957 = z;
        float r47958 = r47956 * r47957;
        float r47959 = t;
        float r47960 = r47959 * r47957;
        float r47961 = r47958 - r47960;
        float r47962 = r47955 / r47961;
        return r47962;
}

double f_id(double x, double y, double z, double t) {
        double r47963 = x;
        double r47964 = 2.0;
        double r47965 = r47963 * r47964;
        double r47966 = y;
        double r47967 = z;
        double r47968 = r47966 * r47967;
        double r47969 = t;
        double r47970 = r47969 * r47967;
        double r47971 = r47968 - r47970;
        double r47972 = r47965 / r47971;
        return r47972;
}


double f_of(float x, float y, float z, float t) {
        float r47973 = x;
        float r47974 = 2.0;
        float r47975 = z;
        float r47976 = r47974 / r47975;
        float r47977 = cbrt(r47976);
        float r47978 = r47977 * r47977;
        float r47979 = y;
        float r47980 = t;
        float r47981 = r47979 - r47980;
        float r47982 = cbrt(r47981);
        float r47983 = r47982 * r47982;
        float r47984 = r47978 / r47983;
        float r47985 = r47973 * r47984;
        float r47986 = r47977 / r47982;
        float r47987 = r47985 * r47986;
        return r47987;
}

double f_od(double x, double y, double z, double t) {
        double r47988 = x;
        double r47989 = 2.0;
        double r47990 = z;
        double r47991 = r47989 / r47990;
        double r47992 = cbrt(r47991);
        double r47993 = r47992 * r47992;
        double r47994 = y;
        double r47995 = t;
        double r47996 = r47994 - r47995;
        double r47997 = cbrt(r47996);
        double r47998 = r47997 * r47997;
        double r47999 = r47993 / r47998;
        double r48000 = r47988 * r47999;
        double r48001 = r47992 / r47997;
        double r48002 = r48000 * r48001;
        return r48002;
}

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 r48003, r48004, r48005, r48006, r48007, r48008, r48009, r48010, r48011, r48012;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r48003);
        mpfr_init_set_str(r48004, "2.0", 10, MPFR_RNDN);
        mpfr_init(r48005);
        mpfr_init(r48006);
        mpfr_init(r48007);
        mpfr_init(r48008);
        mpfr_init(r48009);
        mpfr_init(r48010);
        mpfr_init(r48011);
        mpfr_init(r48012);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r48003, x, MPFR_RNDN);
        ;
        mpfr_mul(r48005, r48003, r48004, MPFR_RNDN);
        mpfr_set_d(r48006, y, MPFR_RNDN);
        mpfr_set_d(r48007, z, MPFR_RNDN);
        mpfr_mul(r48008, r48006, r48007, MPFR_RNDN);
        mpfr_set_d(r48009, t, MPFR_RNDN);
        mpfr_mul(r48010, r48009, r48007, MPFR_RNDN);
        mpfr_sub(r48011, r48008, r48010, MPFR_RNDN);
        mpfr_div(r48012, r48005, r48011, MPFR_RNDN);
        return mpfr_get_d(r48012, MPFR_RNDN);
}

static mpfr_t r48013, r48014, r48015, r48016, r48017, r48018, r48019, r48020, r48021, r48022, r48023, r48024, r48025, r48026, r48027;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r48013);
        mpfr_init_set_str(r48014, "2.0", 10, MPFR_RNDN);
        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);
        mpfr_init(r48024);
        mpfr_init(r48025);
        mpfr_init(r48026);
        mpfr_init(r48027);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r48013, x, MPFR_RNDN);
        ;
        mpfr_set_d(r48015, z, MPFR_RNDN);
        mpfr_div(r48016, r48014, r48015, MPFR_RNDN);
        mpfr_cbrt(r48017, r48016, MPFR_RNDN);
        mpfr_mul(r48018, r48017, r48017, MPFR_RNDN);
        mpfr_set_d(r48019, y, MPFR_RNDN);
        mpfr_set_d(r48020, t, MPFR_RNDN);
        mpfr_sub(r48021, r48019, r48020, MPFR_RNDN);
        mpfr_cbrt(r48022, r48021, MPFR_RNDN);
        mpfr_mul(r48023, r48022, r48022, MPFR_RNDN);
        mpfr_div(r48024, r48018, r48023, MPFR_RNDN);
        mpfr_mul(r48025, r48013, r48024, MPFR_RNDN);
        mpfr_div(r48026, r48017, r48022, MPFR_RNDN);
        mpfr_mul(r48027, r48025, r48026, MPFR_RNDN);
        return mpfr_get_d(r48027, MPFR_RNDN);
}

static mpfr_t r48028, r48029, r48030, r48031, r48032, r48033, r48034, r48035, r48036, r48037, r48038, r48039, r48040, r48041, r48042;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r48028);
        mpfr_init_set_str(r48029, "2.0", 10, MPFR_RNDN);
        mpfr_init(r48030);
        mpfr_init(r48031);
        mpfr_init(r48032);
        mpfr_init(r48033);
        mpfr_init(r48034);
        mpfr_init(r48035);
        mpfr_init(r48036);
        mpfr_init(r48037);
        mpfr_init(r48038);
        mpfr_init(r48039);
        mpfr_init(r48040);
        mpfr_init(r48041);
        mpfr_init(r48042);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r48028, x, MPFR_RNDN);
        ;
        mpfr_set_d(r48030, z, MPFR_RNDN);
        mpfr_div(r48031, r48029, r48030, MPFR_RNDN);
        mpfr_cbrt(r48032, r48031, MPFR_RNDN);
        mpfr_mul(r48033, r48032, r48032, MPFR_RNDN);
        mpfr_set_d(r48034, y, MPFR_RNDN);
        mpfr_set_d(r48035, t, MPFR_RNDN);
        mpfr_sub(r48036, r48034, r48035, MPFR_RNDN);
        mpfr_cbrt(r48037, r48036, MPFR_RNDN);
        mpfr_mul(r48038, r48037, r48037, MPFR_RNDN);
        mpfr_div(r48039, r48033, r48038, MPFR_RNDN);
        mpfr_mul(r48040, r48028, r48039, MPFR_RNDN);
        mpfr_div(r48041, r48032, r48037, MPFR_RNDN);
        mpfr_mul(r48042, r48040, r48041, MPFR_RNDN);
        return mpfr_get_d(r48042, MPFR_RNDN);
}

