#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, A";

double f_if(float x, float y) {
        float r47685 = x;
        float r47686 = y;
        float r47687 = r47685 + r47686;
        float r47688 = r47685 - r47686;
        float r47689 = r47687 / r47688;
        return r47689;
}

double f_id(double x, double y) {
        double r47690 = x;
        double r47691 = y;
        double r47692 = r47690 + r47691;
        double r47693 = r47690 - r47691;
        double r47694 = r47692 / r47693;
        return r47694;
}


double f_of(float x, float y) {
        float r47695 = x;
        float r47696 = y;
        float r47697 = r47695 + r47696;
        float r47698 = r47695 - r47696;
        float r47699 = r47697 / r47698;
        return r47699;
}

double f_od(double x, double y) {
        double r47700 = x;
        double r47701 = y;
        double r47702 = r47700 + r47701;
        double r47703 = r47700 - r47701;
        double r47704 = r47702 / r47703;
        return r47704;
}

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 r47705, r47706, r47707, r47708, r47709;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r47705);
        mpfr_init(r47706);
        mpfr_init(r47707);
        mpfr_init(r47708);
        mpfr_init(r47709);
}

double f_im(double x, double y) {
        mpfr_set_d(r47705, x, MPFR_RNDN);
        mpfr_set_d(r47706, y, MPFR_RNDN);
        mpfr_add(r47707, r47705, r47706, MPFR_RNDN);
        mpfr_sub(r47708, r47705, r47706, MPFR_RNDN);
        mpfr_div(r47709, r47707, r47708, MPFR_RNDN);
        return mpfr_get_d(r47709, MPFR_RNDN);
}

static mpfr_t r47710, r47711, r47712, r47713, r47714;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47710);
        mpfr_init(r47711);
        mpfr_init(r47712);
        mpfr_init(r47713);
        mpfr_init(r47714);
}

double f_fm(double x, double y) {
        mpfr_set_d(r47710, x, MPFR_RNDN);
        mpfr_set_d(r47711, y, MPFR_RNDN);
        mpfr_add(r47712, r47710, r47711, MPFR_RNDN);
        mpfr_sub(r47713, r47710, r47711, MPFR_RNDN);
        mpfr_div(r47714, r47712, r47713, MPFR_RNDN);
        return mpfr_get_d(r47714, MPFR_RNDN);
}

static mpfr_t r47715, r47716, r47717, r47718, r47719;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47715);
        mpfr_init(r47716);
        mpfr_init(r47717);
        mpfr_init(r47718);
        mpfr_init(r47719);
}

double f_dm(double x, double y) {
        mpfr_set_d(r47715, x, MPFR_RNDN);
        mpfr_set_d(r47716, y, MPFR_RNDN);
        mpfr_add(r47717, r47715, r47716, MPFR_RNDN);
        mpfr_sub(r47718, r47715, r47716, MPFR_RNDN);
        mpfr_div(r47719, r47717, r47718, MPFR_RNDN);
        return mpfr_get_d(r47719, MPFR_RNDN);
}

