#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 r47599 = x;
        float r47600 = 2.0;
        float r47601 = r47599 * r47600;
        float r47602 = y;
        float r47603 = r47601 * r47602;
        float r47604 = r47599 - r47602;
        float r47605 = r47603 / r47604;
        return r47605;
}

double f_id(double x, double y) {
        double r47606 = x;
        double r47607 = 2.0;
        double r47608 = r47606 * r47607;
        double r47609 = y;
        double r47610 = r47608 * r47609;
        double r47611 = r47606 - r47609;
        double r47612 = r47610 / r47611;
        return r47612;
}


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

double f_od(double x, double y) {
        double r47634 = y;
        double r47635 = -1.0358178646774055e-67;
        bool r47636 = r47634 <= r47635;
        double r47637 = x;
        double r47638 = 2.0;
        double r47639 = r47637 * r47638;
        double r47640 = 1;
        double r47641 = r47639 / r47640;
        double r47642 = r47637 - r47634;
        double r47643 = r47634 / r47642;
        double r47644 = r47641 * r47643;
        double r47645 = 4.295395118047257e-19;
        bool r47646 = r47634 <= r47645;
        double r47647 = r47637 / r47642;
        double r47648 = r47640 / r47634;
        double r47649 = r47638 / r47648;
        double r47650 = r47647 * r47649;
        double r47651 = r47642 / r47634;
        double r47652 = r47639 / r47651;
        double r47653 = r47646 ? r47650 : r47652;
        double r47654 = r47636 ? r47644 : r47653;
        return r47654;
}

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 r47655, r47656, r47657, r47658, r47659, r47660, r47661;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r47655);
        mpfr_init_set_str(r47656, "2.0", 10, MPFR_RNDN);
        mpfr_init(r47657);
        mpfr_init(r47658);
        mpfr_init(r47659);
        mpfr_init(r47660);
        mpfr_init(r47661);
}

double f_im(double x, double y) {
        mpfr_set_d(r47655, x, MPFR_RNDN);
        ;
        mpfr_mul(r47657, r47655, r47656, MPFR_RNDN);
        mpfr_set_d(r47658, y, MPFR_RNDN);
        mpfr_mul(r47659, r47657, r47658, MPFR_RNDN);
        mpfr_sub(r47660, r47655, r47658, MPFR_RNDN);
        mpfr_div(r47661, r47659, r47660, MPFR_RNDN);
        return mpfr_get_d(r47661, MPFR_RNDN);
}

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

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47662);
        mpfr_init_set_str(r47663, "-1.0358178646774055e-67", 10, MPFR_RNDN);
        mpfr_init(r47664);
        mpfr_init(r47665);
        mpfr_init_set_str(r47666, "2.0", 10, MPFR_RNDN);
        mpfr_init(r47667);
        mpfr_init_set_str(r47668, "1", 10, MPFR_RNDN);
        mpfr_init(r47669);
        mpfr_init(r47670);
        mpfr_init(r47671);
        mpfr_init(r47672);
        mpfr_init_set_str(r47673, "4.295395118047257e-19", 10, MPFR_RNDN);
        mpfr_init(r47674);
        mpfr_init(r47675);
        mpfr_init(r47676);
        mpfr_init(r47677);
        mpfr_init(r47678);
        mpfr_init(r47679);
        mpfr_init(r47680);
        mpfr_init(r47681);
        mpfr_init(r47682);
}

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

static mpfr_t r47683, r47684, r47685, r47686, r47687, r47688, 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(r47683);
        mpfr_init_set_str(r47684, "-1.0358178646774055e-67", 10, MPFR_RNDN);
        mpfr_init(r47685);
        mpfr_init(r47686);
        mpfr_init_set_str(r47687, "2.0", 10, MPFR_RNDN);
        mpfr_init(r47688);
        mpfr_init_set_str(r47689, "1", 10, MPFR_RNDN);
        mpfr_init(r47690);
        mpfr_init(r47691);
        mpfr_init(r47692);
        mpfr_init(r47693);
        mpfr_init_set_str(r47694, "4.295395118047257e-19", 10, MPFR_RNDN);
        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) {
        mpfr_set_d(r47683, y, MPFR_RNDN);
        ;
        mpfr_set_si(r47685, mpfr_cmp(r47683, r47684) <= 0, MPFR_RNDN);
        mpfr_set_d(r47686, x, MPFR_RNDN);
        ;
        mpfr_mul(r47688, r47686, r47687, MPFR_RNDN);
        ;
        mpfr_div(r47690, r47688, r47689, MPFR_RNDN);
        mpfr_sub(r47691, r47686, r47683, MPFR_RNDN);
        mpfr_div(r47692, r47683, r47691, MPFR_RNDN);
        mpfr_mul(r47693, r47690, r47692, MPFR_RNDN);
        ;
        mpfr_set_si(r47695, mpfr_cmp(r47683, r47694) <= 0, MPFR_RNDN);
        mpfr_div(r47696, r47686, r47691, MPFR_RNDN);
        mpfr_div(r47697, r47689, r47683, MPFR_RNDN);
        mpfr_div(r47698, r47687, r47697, MPFR_RNDN);
        mpfr_mul(r47699, r47696, r47698, MPFR_RNDN);
        mpfr_div(r47700, r47691, r47683, MPFR_RNDN);
        mpfr_div(r47701, r47688, r47700, MPFR_RNDN);
        if (mpfr_get_si(r47695, MPFR_RNDN)) { mpfr_set(r47702, r47699, MPFR_RNDN); } else { mpfr_set(r47702, r47701, MPFR_RNDN); };
        if (mpfr_get_si(r47685, MPFR_RNDN)) { mpfr_set(r47703, r47693, MPFR_RNDN); } else { mpfr_set(r47703, r47702, MPFR_RNDN); };
        return mpfr_get_d(r47703, MPFR_RNDN);
}

