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

char *name = "Linear.Projection:perspective from linear-1.19.1.3, B";

double f_if(float x, float y) {
        float r47580 = x;
        float r47581 = 2.0;
        float r47582 = r47580 * r47581;
        float r47583 = y;
        float r47584 = r47582 * r47583;
        float r47585 = r47580 - r47583;
        float r47586 = r47584 / r47585;
        return r47586;
}

double f_id(double x, double y) {
        double r47587 = x;
        double r47588 = 2.0;
        double r47589 = r47587 * r47588;
        double r47590 = y;
        double r47591 = r47589 * r47590;
        double r47592 = r47587 - r47590;
        double r47593 = r47591 / r47592;
        return r47593;
}


double f_of(float x, float y) {
        float r47594 = y;
        float r47595 = -1.0358178646774055e-67;
        bool r47596 = r47594 <= r47595;
        float r47597 = x;
        float r47598 = 2.0;
        float r47599 = r47597 * r47598;
        float r47600 = 1;
        float r47601 = r47599 / r47600;
        float r47602 = r47597 - r47594;
        float r47603 = r47594 / r47602;
        float r47604 = r47601 * r47603;
        float r47605 = 4.295395118047257e-19;
        bool r47606 = r47594 <= r47605;
        float r47607 = r47597 / r47602;
        float r47608 = r47600 / r47594;
        float r47609 = r47598 / r47608;
        float r47610 = r47607 * r47609;
        float r47611 = r47602 / r47594;
        float r47612 = r47599 / r47611;
        float r47613 = r47606 ? r47610 : r47612;
        float r47614 = r47596 ? r47604 : r47613;
        return r47614;
}

double f_od(double x, double y) {
        double r47615 = y;
        double r47616 = -1.0358178646774055e-67;
        bool r47617 = r47615 <= r47616;
        double r47618 = x;
        double r47619 = 2.0;
        double r47620 = r47618 * r47619;
        double r47621 = 1;
        double r47622 = r47620 / r47621;
        double r47623 = r47618 - r47615;
        double r47624 = r47615 / r47623;
        double r47625 = r47622 * r47624;
        double r47626 = 4.295395118047257e-19;
        bool r47627 = r47615 <= r47626;
        double r47628 = r47618 / r47623;
        double r47629 = r47621 / r47615;
        double r47630 = r47619 / r47629;
        double r47631 = r47628 * r47630;
        double r47632 = r47623 / r47615;
        double r47633 = r47620 / r47632;
        double r47634 = r47627 ? r47631 : r47633;
        double r47635 = r47617 ? r47625 : r47634;
        return r47635;
}

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 r47636, r47637, r47638, r47639, r47640, r47641, r47642;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r47636);
        mpfr_init_set_str(r47637, "2.0", 10, MPFR_RNDN);
        mpfr_init(r47638);
        mpfr_init(r47639);
        mpfr_init(r47640);
        mpfr_init(r47641);
        mpfr_init(r47642);
}

double f_im(double x, double y) {
        mpfr_set_d(r47636, x, MPFR_RNDN);
        ;
        mpfr_mul(r47638, r47636, r47637, MPFR_RNDN);
        mpfr_set_d(r47639, y, MPFR_RNDN);
        mpfr_mul(r47640, r47638, r47639, MPFR_RNDN);
        mpfr_sub(r47641, r47636, r47639, MPFR_RNDN);
        mpfr_div(r47642, r47640, r47641, MPFR_RNDN);
        return mpfr_get_d(r47642, MPFR_RNDN);
}

static mpfr_t r47643, r47644, r47645, r47646, r47647, r47648, r47649, r47650, r47651, r47652, r47653, r47654, r47655, r47656, r47657, r47658, r47659, r47660, r47661, r47662, r47663;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47643);
        mpfr_init_set_str(r47644, "-1.0358178646774055e-67", 10, MPFR_RNDN);
        mpfr_init(r47645);
        mpfr_init(r47646);
        mpfr_init_set_str(r47647, "2.0", 10, MPFR_RNDN);
        mpfr_init(r47648);
        mpfr_init_set_str(r47649, "1", 10, MPFR_RNDN);
        mpfr_init(r47650);
        mpfr_init(r47651);
        mpfr_init(r47652);
        mpfr_init(r47653);
        mpfr_init_set_str(r47654, "4.295395118047257e-19", 10, MPFR_RNDN);
        mpfr_init(r47655);
        mpfr_init(r47656);
        mpfr_init(r47657);
        mpfr_init(r47658);
        mpfr_init(r47659);
        mpfr_init(r47660);
        mpfr_init(r47661);
        mpfr_init(r47662);
        mpfr_init(r47663);
}

double f_fm(double x, double y) {
        mpfr_set_d(r47643, y, MPFR_RNDN);
        ;
        mpfr_set_si(r47645, mpfr_cmp(r47643, r47644) <= 0, MPFR_RNDN);
        mpfr_set_d(r47646, x, MPFR_RNDN);
        ;
        mpfr_mul(r47648, r47646, r47647, MPFR_RNDN);
        ;
        mpfr_div(r47650, r47648, r47649, MPFR_RNDN);
        mpfr_sub(r47651, r47646, r47643, MPFR_RNDN);
        mpfr_div(r47652, r47643, r47651, MPFR_RNDN);
        mpfr_mul(r47653, r47650, r47652, MPFR_RNDN);
        ;
        mpfr_set_si(r47655, mpfr_cmp(r47643, r47654) <= 0, MPFR_RNDN);
        mpfr_div(r47656, r47646, r47651, MPFR_RNDN);
        mpfr_div(r47657, r47649, r47643, MPFR_RNDN);
        mpfr_div(r47658, r47647, r47657, MPFR_RNDN);
        mpfr_mul(r47659, r47656, r47658, MPFR_RNDN);
        mpfr_div(r47660, r47651, r47643, MPFR_RNDN);
        mpfr_div(r47661, r47648, r47660, MPFR_RNDN);
        if (mpfr_get_si(r47655, MPFR_RNDN)) { mpfr_set(r47662, r47659, MPFR_RNDN); } else { mpfr_set(r47662, r47661, MPFR_RNDN); };
        if (mpfr_get_si(r47645, MPFR_RNDN)) { mpfr_set(r47663, r47653, MPFR_RNDN); } else { mpfr_set(r47663, r47662, MPFR_RNDN); };
        return mpfr_get_d(r47663, MPFR_RNDN);
}

static mpfr_t r47664, r47665, r47666, r47667, r47668, r47669, r47670, r47671, r47672, r47673, r47674, r47675, r47676, r47677, r47678, r47679, r47680, r47681, r47682, r47683, r47684;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47664);
        mpfr_init_set_str(r47665, "-1.0358178646774055e-67", 10, MPFR_RNDN);
        mpfr_init(r47666);
        mpfr_init(r47667);
        mpfr_init_set_str(r47668, "2.0", 10, MPFR_RNDN);
        mpfr_init(r47669);
        mpfr_init_set_str(r47670, "1", 10, MPFR_RNDN);
        mpfr_init(r47671);
        mpfr_init(r47672);
        mpfr_init(r47673);
        mpfr_init(r47674);
        mpfr_init_set_str(r47675, "4.295395118047257e-19", 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);
}

double f_dm(double x, double y) {
        mpfr_set_d(r47664, y, MPFR_RNDN);
        ;
        mpfr_set_si(r47666, mpfr_cmp(r47664, r47665) <= 0, MPFR_RNDN);
        mpfr_set_d(r47667, x, MPFR_RNDN);
        ;
        mpfr_mul(r47669, r47667, r47668, MPFR_RNDN);
        ;
        mpfr_div(r47671, r47669, r47670, MPFR_RNDN);
        mpfr_sub(r47672, r47667, r47664, MPFR_RNDN);
        mpfr_div(r47673, r47664, r47672, MPFR_RNDN);
        mpfr_mul(r47674, r47671, r47673, MPFR_RNDN);
        ;
        mpfr_set_si(r47676, mpfr_cmp(r47664, r47675) <= 0, MPFR_RNDN);
        mpfr_div(r47677, r47667, r47672, MPFR_RNDN);
        mpfr_div(r47678, r47670, r47664, MPFR_RNDN);
        mpfr_div(r47679, r47668, r47678, MPFR_RNDN);
        mpfr_mul(r47680, r47677, r47679, MPFR_RNDN);
        mpfr_div(r47681, r47672, r47664, MPFR_RNDN);
        mpfr_div(r47682, r47669, r47681, MPFR_RNDN);
        if (mpfr_get_si(r47676, MPFR_RNDN)) { mpfr_set(r47683, r47680, MPFR_RNDN); } else { mpfr_set(r47683, r47682, MPFR_RNDN); };
        if (mpfr_get_si(r47666, MPFR_RNDN)) { mpfr_set(r47684, r47674, MPFR_RNDN); } else { mpfr_set(r47684, r47683, MPFR_RNDN); };
        return mpfr_get_d(r47684, MPFR_RNDN);
}

