#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 r44665 = x;
        float r44666 = 2.0f;
        float r44667 = r44665 * r44666;
        float r44668 = y;
        float r44669 = r44667 * r44668;
        float r44670 = r44665 - r44668;
        float r44671 = r44669 / r44670;
        return r44671;
}

double f_id(double x, double y) {
        double r44672 = x;
        double r44673 = 2.0;
        double r44674 = r44672 * r44673;
        double r44675 = y;
        double r44676 = r44674 * r44675;
        double r44677 = r44672 - r44675;
        double r44678 = r44676 / r44677;
        return r44678;
}


double f_of(float x, float y) {
        float r44679 = y;
        float r44680 = -4.28061768498452e-40f;
        bool r44681 = r44679 <= r44680;
        float r44682 = x;
        float r44683 = 2.0f;
        float r44684 = r44682 * r44683;
        float r44685 = r44682 - r44679;
        float r44686 = r44685 / r44679;
        float r44687 = r44684 / r44686;
        float r44688 = 2.945079413730394e-59f;
        bool r44689 = r44679 <= r44688;
        float r44690 = r44684 / r44685;
        float r44691 = r44690 * r44679;
        float r44692 = r44689 ? r44691 : r44687;
        float r44693 = r44681 ? r44687 : r44692;
        return r44693;
}

double f_od(double x, double y) {
        double r44694 = y;
        double r44695 = -4.28061768498452e-40;
        bool r44696 = r44694 <= r44695;
        double r44697 = x;
        double r44698 = 2.0;
        double r44699 = r44697 * r44698;
        double r44700 = r44697 - r44694;
        double r44701 = r44700 / r44694;
        double r44702 = r44699 / r44701;
        double r44703 = 2.945079413730394e-59;
        bool r44704 = r44694 <= r44703;
        double r44705 = r44699 / r44700;
        double r44706 = r44705 * r44694;
        double r44707 = r44704 ? r44706 : r44702;
        double r44708 = r44696 ? r44702 : r44707;
        return r44708;
}

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 r44709, r44710, r44711, r44712, r44713, r44714, r44715;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r44709);
        mpfr_init_set_str(r44710, "2.0", 10, MPFR_RNDN);
        mpfr_init(r44711);
        mpfr_init(r44712);
        mpfr_init(r44713);
        mpfr_init(r44714);
        mpfr_init(r44715);
}

double f_im(double x, double y) {
        mpfr_set_d(r44709, x, MPFR_RNDN);
        ;
        mpfr_mul(r44711, r44709, r44710, MPFR_RNDN);
        mpfr_set_d(r44712, y, MPFR_RNDN);
        mpfr_mul(r44713, r44711, r44712, MPFR_RNDN);
        mpfr_sub(r44714, r44709, r44712, MPFR_RNDN);
        mpfr_div(r44715, r44713, r44714, MPFR_RNDN);
        return mpfr_get_d(r44715, MPFR_RNDN);
}

static mpfr_t r44716, r44717, r44718, r44719, r44720, r44721, r44722, r44723, r44724, r44725, r44726, r44727, r44728, r44729, r44730;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r44716);
        mpfr_init_set_str(r44717, "-4.28061768498452e-40", 10, MPFR_RNDN);
        mpfr_init(r44718);
        mpfr_init(r44719);
        mpfr_init_set_str(r44720, "2.0", 10, MPFR_RNDN);
        mpfr_init(r44721);
        mpfr_init(r44722);
        mpfr_init(r44723);
        mpfr_init(r44724);
        mpfr_init_set_str(r44725, "2.945079413730394e-59", 10, MPFR_RNDN);
        mpfr_init(r44726);
        mpfr_init(r44727);
        mpfr_init(r44728);
        mpfr_init(r44729);
        mpfr_init(r44730);
}

double f_fm(double x, double y) {
        mpfr_set_d(r44716, y, MPFR_RNDN);
        ;
        mpfr_set_si(r44718, mpfr_cmp(r44716, r44717) <= 0, MPFR_RNDN);
        mpfr_set_d(r44719, x, MPFR_RNDN);
        ;
        mpfr_mul(r44721, r44719, r44720, MPFR_RNDN);
        mpfr_sub(r44722, r44719, r44716, MPFR_RNDN);
        mpfr_div(r44723, r44722, r44716, MPFR_RNDN);
        mpfr_div(r44724, r44721, r44723, MPFR_RNDN);
        ;
        mpfr_set_si(r44726, mpfr_cmp(r44716, r44725) <= 0, MPFR_RNDN);
        mpfr_div(r44727, r44721, r44722, MPFR_RNDN);
        mpfr_mul(r44728, r44727, r44716, MPFR_RNDN);
        if (mpfr_get_si(r44726, MPFR_RNDN)) { mpfr_set(r44729, r44728, MPFR_RNDN); } else { mpfr_set(r44729, r44724, MPFR_RNDN); };
        if (mpfr_get_si(r44718, MPFR_RNDN)) { mpfr_set(r44730, r44724, MPFR_RNDN); } else { mpfr_set(r44730, r44729, MPFR_RNDN); };
        return mpfr_get_d(r44730, MPFR_RNDN);
}

static mpfr_t r44731, r44732, r44733, r44734, r44735, r44736, r44737, r44738, r44739, r44740, r44741, r44742, r44743, r44744, r44745;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r44731);
        mpfr_init_set_str(r44732, "-4.28061768498452e-40", 10, MPFR_RNDN);
        mpfr_init(r44733);
        mpfr_init(r44734);
        mpfr_init_set_str(r44735, "2.0", 10, MPFR_RNDN);
        mpfr_init(r44736);
        mpfr_init(r44737);
        mpfr_init(r44738);
        mpfr_init(r44739);
        mpfr_init_set_str(r44740, "2.945079413730394e-59", 10, MPFR_RNDN);
        mpfr_init(r44741);
        mpfr_init(r44742);
        mpfr_init(r44743);
        mpfr_init(r44744);
        mpfr_init(r44745);
}

double f_dm(double x, double y) {
        mpfr_set_d(r44731, y, MPFR_RNDN);
        ;
        mpfr_set_si(r44733, mpfr_cmp(r44731, r44732) <= 0, MPFR_RNDN);
        mpfr_set_d(r44734, x, MPFR_RNDN);
        ;
        mpfr_mul(r44736, r44734, r44735, MPFR_RNDN);
        mpfr_sub(r44737, r44734, r44731, MPFR_RNDN);
        mpfr_div(r44738, r44737, r44731, MPFR_RNDN);
        mpfr_div(r44739, r44736, r44738, MPFR_RNDN);
        ;
        mpfr_set_si(r44741, mpfr_cmp(r44731, r44740) <= 0, MPFR_RNDN);
        mpfr_div(r44742, r44736, r44737, MPFR_RNDN);
        mpfr_mul(r44743, r44742, r44731, MPFR_RNDN);
        if (mpfr_get_si(r44741, MPFR_RNDN)) { mpfr_set(r44744, r44743, MPFR_RNDN); } else { mpfr_set(r44744, r44739, MPFR_RNDN); };
        if (mpfr_get_si(r44733, MPFR_RNDN)) { mpfr_set(r44745, r44739, MPFR_RNDN); } else { mpfr_set(r44745, r44744, MPFR_RNDN); };
        return mpfr_get_d(r44745, MPFR_RNDN);
}

