#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 r47324 = x;
        float r47325 = 2.0;
        float r47326 = r47324 * r47325;
        float r47327 = y;
        float r47328 = r47326 * r47327;
        float r47329 = r47324 - r47327;
        float r47330 = r47328 / r47329;
        return r47330;
}

double f_id(double x, double y) {
        double r47331 = x;
        double r47332 = 2.0;
        double r47333 = r47331 * r47332;
        double r47334 = y;
        double r47335 = r47333 * r47334;
        double r47336 = r47331 - r47334;
        double r47337 = r47335 / r47336;
        return r47337;
}


double f_of(float x, float y) {
        float r47338 = y;
        float r47339 = -1.0358178646774055e-67;
        bool r47340 = r47338 <= r47339;
        float r47341 = x;
        float r47342 = 2.0;
        float r47343 = r47341 * r47342;
        float r47344 = 1;
        float r47345 = r47343 / r47344;
        float r47346 = r47341 - r47338;
        float r47347 = r47338 / r47346;
        float r47348 = r47345 * r47347;
        float r47349 = 4.295395118047257e-19;
        bool r47350 = r47338 <= r47349;
        float r47351 = r47341 / r47346;
        float r47352 = r47344 / r47338;
        float r47353 = r47342 / r47352;
        float r47354 = r47351 * r47353;
        float r47355 = r47346 / r47338;
        float r47356 = r47343 / r47355;
        float r47357 = r47350 ? r47354 : r47356;
        float r47358 = r47340 ? r47348 : r47357;
        return r47358;
}

double f_od(double x, double y) {
        double r47359 = y;
        double r47360 = -1.0358178646774055e-67;
        bool r47361 = r47359 <= r47360;
        double r47362 = x;
        double r47363 = 2.0;
        double r47364 = r47362 * r47363;
        double r47365 = 1;
        double r47366 = r47364 / r47365;
        double r47367 = r47362 - r47359;
        double r47368 = r47359 / r47367;
        double r47369 = r47366 * r47368;
        double r47370 = 4.295395118047257e-19;
        bool r47371 = r47359 <= r47370;
        double r47372 = r47362 / r47367;
        double r47373 = r47365 / r47359;
        double r47374 = r47363 / r47373;
        double r47375 = r47372 * r47374;
        double r47376 = r47367 / r47359;
        double r47377 = r47364 / r47376;
        double r47378 = r47371 ? r47375 : r47377;
        double r47379 = r47361 ? r47369 : r47378;
        return r47379;
}

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 r47380, r47381, r47382, r47383, r47384, r47385, r47386;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r47380);
        mpfr_init_set_str(r47381, "2.0", 10, MPFR_RNDN);
        mpfr_init(r47382);
        mpfr_init(r47383);
        mpfr_init(r47384);
        mpfr_init(r47385);
        mpfr_init(r47386);
}

double f_im(double x, double y) {
        mpfr_set_d(r47380, x, MPFR_RNDN);
        ;
        mpfr_mul(r47382, r47380, r47381, MPFR_RNDN);
        mpfr_set_d(r47383, y, MPFR_RNDN);
        mpfr_mul(r47384, r47382, r47383, MPFR_RNDN);
        mpfr_sub(r47385, r47380, r47383, MPFR_RNDN);
        mpfr_div(r47386, r47384, r47385, MPFR_RNDN);
        return mpfr_get_d(r47386, MPFR_RNDN);
}

static mpfr_t r47387, r47388, r47389, r47390, r47391, r47392, r47393, r47394, r47395, r47396, r47397, r47398, r47399, r47400, r47401, r47402, r47403, r47404, r47405, r47406, r47407;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47387);
        mpfr_init_set_str(r47388, "-1.0358178646774055e-67", 10, MPFR_RNDN);
        mpfr_init(r47389);
        mpfr_init(r47390);
        mpfr_init_set_str(r47391, "2.0", 10, MPFR_RNDN);
        mpfr_init(r47392);
        mpfr_init_set_str(r47393, "1", 10, MPFR_RNDN);
        mpfr_init(r47394);
        mpfr_init(r47395);
        mpfr_init(r47396);
        mpfr_init(r47397);
        mpfr_init_set_str(r47398, "4.295395118047257e-19", 10, MPFR_RNDN);
        mpfr_init(r47399);
        mpfr_init(r47400);
        mpfr_init(r47401);
        mpfr_init(r47402);
        mpfr_init(r47403);
        mpfr_init(r47404);
        mpfr_init(r47405);
        mpfr_init(r47406);
        mpfr_init(r47407);
}

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

static mpfr_t r47408, r47409, r47410, r47411, r47412, r47413, r47414, r47415, r47416, r47417, r47418, r47419, r47420, r47421, r47422, r47423, r47424, r47425, r47426, r47427, r47428;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47408);
        mpfr_init_set_str(r47409, "-1.0358178646774055e-67", 10, MPFR_RNDN);
        mpfr_init(r47410);
        mpfr_init(r47411);
        mpfr_init_set_str(r47412, "2.0", 10, MPFR_RNDN);
        mpfr_init(r47413);
        mpfr_init_set_str(r47414, "1", 10, MPFR_RNDN);
        mpfr_init(r47415);
        mpfr_init(r47416);
        mpfr_init(r47417);
        mpfr_init(r47418);
        mpfr_init_set_str(r47419, "4.295395118047257e-19", 10, MPFR_RNDN);
        mpfr_init(r47420);
        mpfr_init(r47421);
        mpfr_init(r47422);
        mpfr_init(r47423);
        mpfr_init(r47424);
        mpfr_init(r47425);
        mpfr_init(r47426);
        mpfr_init(r47427);
        mpfr_init(r47428);
}

double f_dm(double x, double y) {
        mpfr_set_d(r47408, y, MPFR_RNDN);
        ;
        mpfr_set_si(r47410, mpfr_cmp(r47408, r47409) <= 0, MPFR_RNDN);
        mpfr_set_d(r47411, x, MPFR_RNDN);
        ;
        mpfr_mul(r47413, r47411, r47412, MPFR_RNDN);
        ;
        mpfr_div(r47415, r47413, r47414, MPFR_RNDN);
        mpfr_sub(r47416, r47411, r47408, MPFR_RNDN);
        mpfr_div(r47417, r47408, r47416, MPFR_RNDN);
        mpfr_mul(r47418, r47415, r47417, MPFR_RNDN);
        ;
        mpfr_set_si(r47420, mpfr_cmp(r47408, r47419) <= 0, MPFR_RNDN);
        mpfr_div(r47421, r47411, r47416, MPFR_RNDN);
        mpfr_div(r47422, r47414, r47408, MPFR_RNDN);
        mpfr_div(r47423, r47412, r47422, MPFR_RNDN);
        mpfr_mul(r47424, r47421, r47423, MPFR_RNDN);
        mpfr_div(r47425, r47416, r47408, MPFR_RNDN);
        mpfr_div(r47426, r47413, r47425, MPFR_RNDN);
        if (mpfr_get_si(r47420, MPFR_RNDN)) { mpfr_set(r47427, r47424, MPFR_RNDN); } else { mpfr_set(r47427, r47426, MPFR_RNDN); };
        if (mpfr_get_si(r47410, MPFR_RNDN)) { mpfr_set(r47428, r47418, MPFR_RNDN); } else { mpfr_set(r47428, r47427, MPFR_RNDN); };
        return mpfr_get_d(r47428, MPFR_RNDN);
}

