#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 r47180 = x;
        float r47181 = 2.0;
        float r47182 = r47180 * r47181;
        float r47183 = y;
        float r47184 = z;
        float r47185 = r47183 * r47184;
        float r47186 = t;
        float r47187 = r47186 * r47184;
        float r47188 = r47185 - r47187;
        float r47189 = r47182 / r47188;
        return r47189;
}

double f_id(double x, double y, double z, double t) {
        double r47190 = x;
        double r47191 = 2.0;
        double r47192 = r47190 * r47191;
        double r47193 = y;
        double r47194 = z;
        double r47195 = r47193 * r47194;
        double r47196 = t;
        double r47197 = r47196 * r47194;
        double r47198 = r47195 - r47197;
        double r47199 = r47192 / r47198;
        return r47199;
}


double f_of(float x, float y, float z, float t) {
        float r47200 = x;
        float r47201 = 2.0;
        float r47202 = z;
        float r47203 = r47201 / r47202;
        float r47204 = cbrt(r47203);
        float r47205 = r47204 * r47204;
        float r47206 = y;
        float r47207 = t;
        float r47208 = r47206 - r47207;
        float r47209 = cbrt(r47208);
        float r47210 = r47209 * r47209;
        float r47211 = r47205 / r47210;
        float r47212 = r47200 * r47211;
        float r47213 = r47204 / r47209;
        float r47214 = r47212 * r47213;
        return r47214;
}

double f_od(double x, double y, double z, double t) {
        double r47215 = x;
        double r47216 = 2.0;
        double r47217 = z;
        double r47218 = r47216 / r47217;
        double r47219 = cbrt(r47218);
        double r47220 = r47219 * r47219;
        double r47221 = y;
        double r47222 = t;
        double r47223 = r47221 - r47222;
        double r47224 = cbrt(r47223);
        double r47225 = r47224 * r47224;
        double r47226 = r47220 / r47225;
        double r47227 = r47215 * r47226;
        double r47228 = r47219 / r47224;
        double r47229 = r47227 * r47228;
        return r47229;
}

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 r47230, r47231, r47232, r47233, r47234, r47235, r47236, r47237, r47238, r47239;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r47230);
        mpfr_init_set_str(r47231, "2.0", 10, MPFR_RNDN);
        mpfr_init(r47232);
        mpfr_init(r47233);
        mpfr_init(r47234);
        mpfr_init(r47235);
        mpfr_init(r47236);
        mpfr_init(r47237);
        mpfr_init(r47238);
        mpfr_init(r47239);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r47230, x, MPFR_RNDN);
        ;
        mpfr_mul(r47232, r47230, r47231, MPFR_RNDN);
        mpfr_set_d(r47233, y, MPFR_RNDN);
        mpfr_set_d(r47234, z, MPFR_RNDN);
        mpfr_mul(r47235, r47233, r47234, MPFR_RNDN);
        mpfr_set_d(r47236, t, MPFR_RNDN);
        mpfr_mul(r47237, r47236, r47234, MPFR_RNDN);
        mpfr_sub(r47238, r47235, r47237, MPFR_RNDN);
        mpfr_div(r47239, r47232, r47238, MPFR_RNDN);
        return mpfr_get_d(r47239, MPFR_RNDN);
}

static mpfr_t r47240, r47241, r47242, r47243, r47244, r47245, r47246, r47247, r47248, r47249, r47250, r47251, r47252, r47253, r47254;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47240);
        mpfr_init_set_str(r47241, "2.0", 10, MPFR_RNDN);
        mpfr_init(r47242);
        mpfr_init(r47243);
        mpfr_init(r47244);
        mpfr_init(r47245);
        mpfr_init(r47246);
        mpfr_init(r47247);
        mpfr_init(r47248);
        mpfr_init(r47249);
        mpfr_init(r47250);
        mpfr_init(r47251);
        mpfr_init(r47252);
        mpfr_init(r47253);
        mpfr_init(r47254);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r47240, x, MPFR_RNDN);
        ;
        mpfr_set_d(r47242, z, MPFR_RNDN);
        mpfr_div(r47243, r47241, r47242, MPFR_RNDN);
        mpfr_cbrt(r47244, r47243, MPFR_RNDN);
        mpfr_mul(r47245, r47244, r47244, MPFR_RNDN);
        mpfr_set_d(r47246, y, MPFR_RNDN);
        mpfr_set_d(r47247, t, MPFR_RNDN);
        mpfr_sub(r47248, r47246, r47247, MPFR_RNDN);
        mpfr_cbrt(r47249, r47248, MPFR_RNDN);
        mpfr_mul(r47250, r47249, r47249, MPFR_RNDN);
        mpfr_div(r47251, r47245, r47250, MPFR_RNDN);
        mpfr_mul(r47252, r47240, r47251, MPFR_RNDN);
        mpfr_div(r47253, r47244, r47249, MPFR_RNDN);
        mpfr_mul(r47254, r47252, r47253, MPFR_RNDN);
        return mpfr_get_d(r47254, MPFR_RNDN);
}

static mpfr_t r47255, r47256, r47257, r47258, r47259, r47260, r47261, r47262, r47263, r47264, r47265, r47266, r47267, r47268, r47269;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47255);
        mpfr_init_set_str(r47256, "2.0", 10, MPFR_RNDN);
        mpfr_init(r47257);
        mpfr_init(r47258);
        mpfr_init(r47259);
        mpfr_init(r47260);
        mpfr_init(r47261);
        mpfr_init(r47262);
        mpfr_init(r47263);
        mpfr_init(r47264);
        mpfr_init(r47265);
        mpfr_init(r47266);
        mpfr_init(r47267);
        mpfr_init(r47268);
        mpfr_init(r47269);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r47255, x, MPFR_RNDN);
        ;
        mpfr_set_d(r47257, z, MPFR_RNDN);
        mpfr_div(r47258, r47256, r47257, MPFR_RNDN);
        mpfr_cbrt(r47259, r47258, MPFR_RNDN);
        mpfr_mul(r47260, r47259, r47259, MPFR_RNDN);
        mpfr_set_d(r47261, y, MPFR_RNDN);
        mpfr_set_d(r47262, t, MPFR_RNDN);
        mpfr_sub(r47263, r47261, r47262, MPFR_RNDN);
        mpfr_cbrt(r47264, r47263, MPFR_RNDN);
        mpfr_mul(r47265, r47264, r47264, MPFR_RNDN);
        mpfr_div(r47266, r47260, r47265, MPFR_RNDN);
        mpfr_mul(r47267, r47255, r47266, MPFR_RNDN);
        mpfr_div(r47268, r47259, r47264, MPFR_RNDN);
        mpfr_mul(r47269, r47267, r47268, MPFR_RNDN);
        return mpfr_get_d(r47269, MPFR_RNDN);
}

