#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 r47614 = x;
        float r47615 = 2.0;
        float r47616 = r47614 * r47615;
        float r47617 = y;
        float r47618 = z;
        float r47619 = r47617 * r47618;
        float r47620 = t;
        float r47621 = r47620 * r47618;
        float r47622 = r47619 - r47621;
        float r47623 = r47616 / r47622;
        return r47623;
}

double f_id(double x, double y, double z, double t) {
        double r47624 = x;
        double r47625 = 2.0;
        double r47626 = r47624 * r47625;
        double r47627 = y;
        double r47628 = z;
        double r47629 = r47627 * r47628;
        double r47630 = t;
        double r47631 = r47630 * r47628;
        double r47632 = r47629 - r47631;
        double r47633 = r47626 / r47632;
        return r47633;
}


double f_of(float x, float y, float z, float t) {
        float r47634 = x;
        float r47635 = 2.0;
        float r47636 = z;
        float r47637 = r47635 / r47636;
        float r47638 = cbrt(r47637);
        float r47639 = r47638 * r47638;
        float r47640 = y;
        float r47641 = t;
        float r47642 = r47640 - r47641;
        float r47643 = cbrt(r47642);
        float r47644 = r47643 * r47643;
        float r47645 = r47639 / r47644;
        float r47646 = r47634 * r47645;
        float r47647 = r47638 / r47643;
        float r47648 = r47646 * r47647;
        return r47648;
}

double f_od(double x, double y, double z, double t) {
        double r47649 = x;
        double r47650 = 2.0;
        double r47651 = z;
        double r47652 = r47650 / r47651;
        double r47653 = cbrt(r47652);
        double r47654 = r47653 * r47653;
        double r47655 = y;
        double r47656 = t;
        double r47657 = r47655 - r47656;
        double r47658 = cbrt(r47657);
        double r47659 = r47658 * r47658;
        double r47660 = r47654 / r47659;
        double r47661 = r47649 * r47660;
        double r47662 = r47653 / r47658;
        double r47663 = r47661 * r47662;
        return r47663;
}

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 r47664, r47665, r47666, r47667, r47668, r47669, r47670, r47671, r47672, r47673;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r47664);
        mpfr_init_set_str(r47665, "2.0", 10, MPFR_RNDN);
        mpfr_init(r47666);
        mpfr_init(r47667);
        mpfr_init(r47668);
        mpfr_init(r47669);
        mpfr_init(r47670);
        mpfr_init(r47671);
        mpfr_init(r47672);
        mpfr_init(r47673);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r47664, x, MPFR_RNDN);
        ;
        mpfr_mul(r47666, r47664, r47665, MPFR_RNDN);
        mpfr_set_d(r47667, y, MPFR_RNDN);
        mpfr_set_d(r47668, z, MPFR_RNDN);
        mpfr_mul(r47669, r47667, r47668, MPFR_RNDN);
        mpfr_set_d(r47670, t, MPFR_RNDN);
        mpfr_mul(r47671, r47670, r47668, MPFR_RNDN);
        mpfr_sub(r47672, r47669, r47671, MPFR_RNDN);
        mpfr_div(r47673, r47666, r47672, MPFR_RNDN);
        return mpfr_get_d(r47673, MPFR_RNDN);
}

static mpfr_t r47674, r47675, r47676, r47677, r47678, r47679, r47680, r47681, r47682, r47683, r47684, r47685, r47686, r47687, r47688;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47674);
        mpfr_init_set_str(r47675, "2.0", 10, MPFR_RNDN);
        mpfr_init(r47676);
        mpfr_init(r47677);
        mpfr_init(r47678);
        mpfr_init(r47679);
        mpfr_init(r47680);
        mpfr_init(r47681);
        mpfr_init(r47682);
        mpfr_init(r47683);
        mpfr_init(r47684);
        mpfr_init(r47685);
        mpfr_init(r47686);
        mpfr_init(r47687);
        mpfr_init(r47688);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r47674, x, MPFR_RNDN);
        ;
        mpfr_set_d(r47676, z, MPFR_RNDN);
        mpfr_div(r47677, r47675, r47676, MPFR_RNDN);
        mpfr_cbrt(r47678, r47677, MPFR_RNDN);
        mpfr_mul(r47679, r47678, r47678, MPFR_RNDN);
        mpfr_set_d(r47680, y, MPFR_RNDN);
        mpfr_set_d(r47681, t, MPFR_RNDN);
        mpfr_sub(r47682, r47680, r47681, MPFR_RNDN);
        mpfr_cbrt(r47683, r47682, MPFR_RNDN);
        mpfr_mul(r47684, r47683, r47683, MPFR_RNDN);
        mpfr_div(r47685, r47679, r47684, MPFR_RNDN);
        mpfr_mul(r47686, r47674, r47685, MPFR_RNDN);
        mpfr_div(r47687, r47678, r47683, MPFR_RNDN);
        mpfr_mul(r47688, r47686, r47687, MPFR_RNDN);
        return mpfr_get_d(r47688, MPFR_RNDN);
}

static mpfr_t r47689, r47690, r47691, r47692, r47693, r47694, r47695, r47696, r47697, r47698, r47699, r47700, r47701, r47702, r47703;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47689);
        mpfr_init_set_str(r47690, "2.0", 10, MPFR_RNDN);
        mpfr_init(r47691);
        mpfr_init(r47692);
        mpfr_init(r47693);
        mpfr_init(r47694);
        mpfr_init(r47695);
        mpfr_init(r47696);
        mpfr_init(r47697);
        mpfr_init(r47698);
        mpfr_init(r47699);
        mpfr_init(r47700);
        mpfr_init(r47701);
        mpfr_init(r47702);
        mpfr_init(r47703);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r47689, x, MPFR_RNDN);
        ;
        mpfr_set_d(r47691, z, MPFR_RNDN);
        mpfr_div(r47692, r47690, r47691, MPFR_RNDN);
        mpfr_cbrt(r47693, r47692, MPFR_RNDN);
        mpfr_mul(r47694, r47693, r47693, MPFR_RNDN);
        mpfr_set_d(r47695, y, MPFR_RNDN);
        mpfr_set_d(r47696, t, MPFR_RNDN);
        mpfr_sub(r47697, r47695, r47696, MPFR_RNDN);
        mpfr_cbrt(r47698, r47697, MPFR_RNDN);
        mpfr_mul(r47699, r47698, r47698, MPFR_RNDN);
        mpfr_div(r47700, r47694, r47699, MPFR_RNDN);
        mpfr_mul(r47701, r47689, r47700, MPFR_RNDN);
        mpfr_div(r47702, r47693, r47698, MPFR_RNDN);
        mpfr_mul(r47703, r47701, r47702, MPFR_RNDN);
        return mpfr_get_d(r47703, MPFR_RNDN);
}

