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

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

double f_if(float x, float y) {
        float r47509 = x;
        float r47510 = y;
        float r47511 = r47509 - r47510;
        float r47512 = 2.0;
        float r47513 = r47509 * r47512;
        float r47514 = r47513 * r47510;
        float r47515 = r47511 / r47514;
        return r47515;
}

double f_id(double x, double y) {
        double r47516 = x;
        double r47517 = y;
        double r47518 = r47516 - r47517;
        double r47519 = 2.0;
        double r47520 = r47516 * r47519;
        double r47521 = r47520 * r47517;
        double r47522 = r47518 / r47521;
        return r47522;
}


double f_of(float x, float y) {
        float r47523 = 0.5;
        float r47524 = y;
        float r47525 = r47523 / r47524;
        float r47526 = x;
        float r47527 = r47523 / r47526;
        float r47528 = r47525 - r47527;
        return r47528;
}

double f_od(double x, double y) {
        double r47529 = 0.5;
        double r47530 = y;
        double r47531 = r47529 / r47530;
        double r47532 = x;
        double r47533 = r47529 / r47532;
        double r47534 = r47531 - r47533;
        return r47534;
}

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 r47535, r47536, r47537, r47538, r47539, r47540, r47541;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r47535);
        mpfr_init(r47536);
        mpfr_init(r47537);
        mpfr_init_set_str(r47538, "2.0", 10, MPFR_RNDN);
        mpfr_init(r47539);
        mpfr_init(r47540);
        mpfr_init(r47541);
}

double f_im(double x, double y) {
        mpfr_set_d(r47535, x, MPFR_RNDN);
        mpfr_set_d(r47536, y, MPFR_RNDN);
        mpfr_sub(r47537, r47535, r47536, MPFR_RNDN);
        ;
        mpfr_mul(r47539, r47535, r47538, MPFR_RNDN);
        mpfr_mul(r47540, r47539, r47536, MPFR_RNDN);
        mpfr_div(r47541, r47537, r47540, MPFR_RNDN);
        return mpfr_get_d(r47541, MPFR_RNDN);
}

static mpfr_t r47542, r47543, r47544, r47545, r47546, r47547;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r47542, "0.5", 10, MPFR_RNDN);
        mpfr_init(r47543);
        mpfr_init(r47544);
        mpfr_init(r47545);
        mpfr_init(r47546);
        mpfr_init(r47547);
}

double f_fm(double x, double y) {
        ;
        mpfr_set_d(r47543, y, MPFR_RNDN);
        mpfr_div(r47544, r47542, r47543, MPFR_RNDN);
        mpfr_set_d(r47545, x, MPFR_RNDN);
        mpfr_div(r47546, r47542, r47545, MPFR_RNDN);
        mpfr_sub(r47547, r47544, r47546, MPFR_RNDN);
        return mpfr_get_d(r47547, MPFR_RNDN);
}

static mpfr_t r47548, r47549, r47550, r47551, r47552, r47553;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r47548, "0.5", 10, MPFR_RNDN);
        mpfr_init(r47549);
        mpfr_init(r47550);
        mpfr_init(r47551);
        mpfr_init(r47552);
        mpfr_init(r47553);
}

double f_dm(double x, double y) {
        ;
        mpfr_set_d(r47549, y, MPFR_RNDN);
        mpfr_div(r47550, r47548, r47549, MPFR_RNDN);
        mpfr_set_d(r47551, x, MPFR_RNDN);
        mpfr_div(r47552, r47548, r47551, MPFR_RNDN);
        mpfr_sub(r47553, r47550, r47552, MPFR_RNDN);
        return mpfr_get_d(r47553, MPFR_RNDN);
}

