#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 r47300 = x;
        float r47301 = 2.0;
        float r47302 = r47300 * r47301;
        float r47303 = y;
        float r47304 = r47302 * r47303;
        float r47305 = r47300 - r47303;
        float r47306 = r47304 / r47305;
        return r47306;
}

double f_id(double x, double y) {
        double r47307 = x;
        double r47308 = 2.0;
        double r47309 = r47307 * r47308;
        double r47310 = y;
        double r47311 = r47309 * r47310;
        double r47312 = r47307 - r47310;
        double r47313 = r47311 / r47312;
        return r47313;
}


double f_of(float x, float y) {
        float r47314 = y;
        float r47315 = -2.552896654563677e-77;
        bool r47316 = r47314 <= r47315;
        float r47317 = x;
        float r47318 = 2.0;
        float r47319 = r47317 * r47318;
        float r47320 = 1;
        float r47321 = r47319 / r47320;
        float r47322 = r47317 - r47314;
        float r47323 = r47314 / r47322;
        float r47324 = r47321 * r47323;
        float r47325 = 4.907722326036034e-19;
        bool r47326 = r47314 <= r47325;
        float r47327 = r47317 / r47322;
        float r47328 = r47320 / r47314;
        float r47329 = r47318 / r47328;
        float r47330 = r47327 * r47329;
        float r47331 = r47322 / r47314;
        float r47332 = r47319 / r47331;
        float r47333 = r47326 ? r47330 : r47332;
        float r47334 = r47316 ? r47324 : r47333;
        return r47334;
}

double f_od(double x, double y) {
        double r47335 = y;
        double r47336 = -2.552896654563677e-77;
        bool r47337 = r47335 <= r47336;
        double r47338 = x;
        double r47339 = 2.0;
        double r47340 = r47338 * r47339;
        double r47341 = 1;
        double r47342 = r47340 / r47341;
        double r47343 = r47338 - r47335;
        double r47344 = r47335 / r47343;
        double r47345 = r47342 * r47344;
        double r47346 = 4.907722326036034e-19;
        bool r47347 = r47335 <= r47346;
        double r47348 = r47338 / r47343;
        double r47349 = r47341 / r47335;
        double r47350 = r47339 / r47349;
        double r47351 = r47348 * r47350;
        double r47352 = r47343 / r47335;
        double r47353 = r47340 / r47352;
        double r47354 = r47347 ? r47351 : r47353;
        double r47355 = r47337 ? r47345 : r47354;
        return r47355;
}

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 r47356, r47357, r47358, r47359, r47360, r47361, r47362;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r47356);
        mpfr_init_set_str(r47357, "2.0", 10, MPFR_RNDN);
        mpfr_init(r47358);
        mpfr_init(r47359);
        mpfr_init(r47360);
        mpfr_init(r47361);
        mpfr_init(r47362);
}

double f_im(double x, double y) {
        mpfr_set_d(r47356, x, MPFR_RNDN);
        ;
        mpfr_mul(r47358, r47356, r47357, MPFR_RNDN);
        mpfr_set_d(r47359, y, MPFR_RNDN);
        mpfr_mul(r47360, r47358, r47359, MPFR_RNDN);
        mpfr_sub(r47361, r47356, r47359, MPFR_RNDN);
        mpfr_div(r47362, r47360, r47361, MPFR_RNDN);
        return mpfr_get_d(r47362, MPFR_RNDN);
}

static mpfr_t r47363, r47364, r47365, r47366, r47367, r47368, r47369, r47370, r47371, r47372, r47373, r47374, r47375, r47376, r47377, r47378, r47379, r47380, r47381, r47382, r47383;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47363);
        mpfr_init_set_str(r47364, "-2.552896654563677e-77", 10, MPFR_RNDN);
        mpfr_init(r47365);
        mpfr_init(r47366);
        mpfr_init_set_str(r47367, "2.0", 10, MPFR_RNDN);
        mpfr_init(r47368);
        mpfr_init_set_str(r47369, "1", 10, MPFR_RNDN);
        mpfr_init(r47370);
        mpfr_init(r47371);
        mpfr_init(r47372);
        mpfr_init(r47373);
        mpfr_init_set_str(r47374, "4.907722326036034e-19", 10, MPFR_RNDN);
        mpfr_init(r47375);
        mpfr_init(r47376);
        mpfr_init(r47377);
        mpfr_init(r47378);
        mpfr_init(r47379);
        mpfr_init(r47380);
        mpfr_init(r47381);
        mpfr_init(r47382);
        mpfr_init(r47383);
}

double f_fm(double x, double y) {
        mpfr_set_d(r47363, y, MPFR_RNDN);
        ;
        mpfr_set_si(r47365, mpfr_cmp(r47363, r47364) <= 0, MPFR_RNDN);
        mpfr_set_d(r47366, x, MPFR_RNDN);
        ;
        mpfr_mul(r47368, r47366, r47367, MPFR_RNDN);
        ;
        mpfr_div(r47370, r47368, r47369, MPFR_RNDN);
        mpfr_sub(r47371, r47366, r47363, MPFR_RNDN);
        mpfr_div(r47372, r47363, r47371, MPFR_RNDN);
        mpfr_mul(r47373, r47370, r47372, MPFR_RNDN);
        ;
        mpfr_set_si(r47375, mpfr_cmp(r47363, r47374) <= 0, MPFR_RNDN);
        mpfr_div(r47376, r47366, r47371, MPFR_RNDN);
        mpfr_div(r47377, r47369, r47363, MPFR_RNDN);
        mpfr_div(r47378, r47367, r47377, MPFR_RNDN);
        mpfr_mul(r47379, r47376, r47378, MPFR_RNDN);
        mpfr_div(r47380, r47371, r47363, MPFR_RNDN);
        mpfr_div(r47381, r47368, r47380, MPFR_RNDN);
        if (mpfr_get_si(r47375, MPFR_RNDN)) { mpfr_set(r47382, r47379, MPFR_RNDN); } else { mpfr_set(r47382, r47381, MPFR_RNDN); };
        if (mpfr_get_si(r47365, MPFR_RNDN)) { mpfr_set(r47383, r47373, MPFR_RNDN); } else { mpfr_set(r47383, r47382, MPFR_RNDN); };
        return mpfr_get_d(r47383, MPFR_RNDN);
}

static mpfr_t r47384, r47385, r47386, r47387, r47388, r47389, r47390, r47391, r47392, r47393, r47394, r47395, r47396, r47397, r47398, r47399, r47400, r47401, r47402, r47403, r47404;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47384);
        mpfr_init_set_str(r47385, "-2.552896654563677e-77", 10, MPFR_RNDN);
        mpfr_init(r47386);
        mpfr_init(r47387);
        mpfr_init_set_str(r47388, "2.0", 10, MPFR_RNDN);
        mpfr_init(r47389);
        mpfr_init_set_str(r47390, "1", 10, MPFR_RNDN);
        mpfr_init(r47391);
        mpfr_init(r47392);
        mpfr_init(r47393);
        mpfr_init(r47394);
        mpfr_init_set_str(r47395, "4.907722326036034e-19", 10, MPFR_RNDN);
        mpfr_init(r47396);
        mpfr_init(r47397);
        mpfr_init(r47398);
        mpfr_init(r47399);
        mpfr_init(r47400);
        mpfr_init(r47401);
        mpfr_init(r47402);
        mpfr_init(r47403);
        mpfr_init(r47404);
}

double f_dm(double x, double y) {
        mpfr_set_d(r47384, y, MPFR_RNDN);
        ;
        mpfr_set_si(r47386, mpfr_cmp(r47384, r47385) <= 0, MPFR_RNDN);
        mpfr_set_d(r47387, x, MPFR_RNDN);
        ;
        mpfr_mul(r47389, r47387, r47388, MPFR_RNDN);
        ;
        mpfr_div(r47391, r47389, r47390, MPFR_RNDN);
        mpfr_sub(r47392, r47387, r47384, MPFR_RNDN);
        mpfr_div(r47393, r47384, r47392, MPFR_RNDN);
        mpfr_mul(r47394, r47391, r47393, MPFR_RNDN);
        ;
        mpfr_set_si(r47396, mpfr_cmp(r47384, r47395) <= 0, MPFR_RNDN);
        mpfr_div(r47397, r47387, r47392, MPFR_RNDN);
        mpfr_div(r47398, r47390, r47384, MPFR_RNDN);
        mpfr_div(r47399, r47388, r47398, MPFR_RNDN);
        mpfr_mul(r47400, r47397, r47399, MPFR_RNDN);
        mpfr_div(r47401, r47392, r47384, MPFR_RNDN);
        mpfr_div(r47402, r47389, r47401, MPFR_RNDN);
        if (mpfr_get_si(r47396, MPFR_RNDN)) { mpfr_set(r47403, r47400, MPFR_RNDN); } else { mpfr_set(r47403, r47402, MPFR_RNDN); };
        if (mpfr_get_si(r47386, MPFR_RNDN)) { mpfr_set(r47404, r47394, MPFR_RNDN); } else { mpfr_set(r47404, r47403, MPFR_RNDN); };
        return mpfr_get_d(r47404, MPFR_RNDN);
}

