#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 r47485 = x;
        float r47486 = y;
        float r47487 = r47485 - r47486;
        float r47488 = 2.0;
        float r47489 = r47485 * r47488;
        float r47490 = r47489 * r47486;
        float r47491 = r47487 / r47490;
        return r47491;
}

double f_id(double x, double y) {
        double r47492 = x;
        double r47493 = y;
        double r47494 = r47492 - r47493;
        double r47495 = 2.0;
        double r47496 = r47492 * r47495;
        double r47497 = r47496 * r47493;
        double r47498 = r47494 / r47497;
        return r47498;
}


double f_of(float x, float y) {
        float r47499 = 0.5;
        float r47500 = y;
        float r47501 = r47499 / r47500;
        float r47502 = x;
        float r47503 = r47499 / r47502;
        float r47504 = r47501 - r47503;
        return r47504;
}

double f_od(double x, double y) {
        double r47505 = 0.5;
        double r47506 = y;
        double r47507 = r47505 / r47506;
        double r47508 = x;
        double r47509 = r47505 / r47508;
        double r47510 = r47507 - r47509;
        return r47510;
}

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 r47511, r47512, r47513, r47514, r47515, r47516, r47517;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r47511);
        mpfr_init(r47512);
        mpfr_init(r47513);
        mpfr_init_set_str(r47514, "2.0", 10, MPFR_RNDN);
        mpfr_init(r47515);
        mpfr_init(r47516);
        mpfr_init(r47517);
}

double f_im(double x, double y) {
        mpfr_set_d(r47511, x, MPFR_RNDN);
        mpfr_set_d(r47512, y, MPFR_RNDN);
        mpfr_sub(r47513, r47511, r47512, MPFR_RNDN);
        ;
        mpfr_mul(r47515, r47511, r47514, MPFR_RNDN);
        mpfr_mul(r47516, r47515, r47512, MPFR_RNDN);
        mpfr_div(r47517, r47513, r47516, MPFR_RNDN);
        return mpfr_get_d(r47517, MPFR_RNDN);
}

static mpfr_t r47518, r47519, r47520, r47521, r47522, r47523;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r47518, "0.5", 10, MPFR_RNDN);
        mpfr_init(r47519);
        mpfr_init(r47520);
        mpfr_init(r47521);
        mpfr_init(r47522);
        mpfr_init(r47523);
}

double f_fm(double x, double y) {
        ;
        mpfr_set_d(r47519, y, MPFR_RNDN);
        mpfr_div(r47520, r47518, r47519, MPFR_RNDN);
        mpfr_set_d(r47521, x, MPFR_RNDN);
        mpfr_div(r47522, r47518, r47521, MPFR_RNDN);
        mpfr_sub(r47523, r47520, r47522, MPFR_RNDN);
        return mpfr_get_d(r47523, MPFR_RNDN);
}

static mpfr_t r47524, r47525, r47526, r47527, r47528, r47529;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r47524, "0.5", 10, MPFR_RNDN);
        mpfr_init(r47525);
        mpfr_init(r47526);
        mpfr_init(r47527);
        mpfr_init(r47528);
        mpfr_init(r47529);
}

double f_dm(double x, double y) {
        ;
        mpfr_set_d(r47525, y, MPFR_RNDN);
        mpfr_div(r47526, r47524, r47525, MPFR_RNDN);
        mpfr_set_d(r47527, x, MPFR_RNDN);
        mpfr_div(r47528, r47524, r47527, MPFR_RNDN);
        mpfr_sub(r47529, r47526, r47528, MPFR_RNDN);
        return mpfr_get_d(r47529, MPFR_RNDN);
}

