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

char *name = "Linear.Projection:inverseInfinitePerspective from linear-1.19.1.3";

double f_if(float x, float y, float z, float t) {
        float r47530 = x;
        float r47531 = y;
        float r47532 = r47530 * r47531;
        float r47533 = z;
        float r47534 = r47533 * r47531;
        float r47535 = r47532 - r47534;
        float r47536 = t;
        float r47537 = r47535 * r47536;
        return r47537;
}

double f_id(double x, double y, double z, double t) {
        double r47538 = x;
        double r47539 = y;
        double r47540 = r47538 * r47539;
        double r47541 = z;
        double r47542 = r47541 * r47539;
        double r47543 = r47540 - r47542;
        double r47544 = t;
        double r47545 = r47543 * r47544;
        return r47545;
}


double f_of(float x, float y, float z, float t) {
        float r47546 = y;
        float r47547 = -28.696850627339362;
        bool r47548 = r47546 <= r47547;
        float r47549 = t;
        float r47550 = r47549 * r47546;
        float r47551 = x;
        float r47552 = z;
        float r47553 = r47551 - r47552;
        float r47554 = r47550 * r47553;
        float r47555 = 1.2704072794546793e-51;
        bool r47556 = r47546 <= r47555;
        float r47557 = r47546 * r47553;
        float r47558 = r47549 * r47557;
        float r47559 = r47556 ? r47558 : r47554;
        float r47560 = r47548 ? r47554 : r47559;
        return r47560;
}

double f_od(double x, double y, double z, double t) {
        double r47561 = y;
        double r47562 = -28.696850627339362;
        bool r47563 = r47561 <= r47562;
        double r47564 = t;
        double r47565 = r47564 * r47561;
        double r47566 = x;
        double r47567 = z;
        double r47568 = r47566 - r47567;
        double r47569 = r47565 * r47568;
        double r47570 = 1.2704072794546793e-51;
        bool r47571 = r47561 <= r47570;
        double r47572 = r47561 * r47568;
        double r47573 = r47564 * r47572;
        double r47574 = r47571 ? r47573 : r47569;
        double r47575 = r47563 ? r47569 : r47574;
        return r47575;
}

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 r47576, r47577, r47578, r47579, r47580, r47581, r47582, r47583;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r47576);
        mpfr_init(r47577);
        mpfr_init(r47578);
        mpfr_init(r47579);
        mpfr_init(r47580);
        mpfr_init(r47581);
        mpfr_init(r47582);
        mpfr_init(r47583);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r47576, x, MPFR_RNDN);
        mpfr_set_d(r47577, y, MPFR_RNDN);
        mpfr_mul(r47578, r47576, r47577, MPFR_RNDN);
        mpfr_set_d(r47579, z, MPFR_RNDN);
        mpfr_mul(r47580, r47579, r47577, MPFR_RNDN);
        mpfr_sub(r47581, r47578, r47580, MPFR_RNDN);
        mpfr_set_d(r47582, t, MPFR_RNDN);
        mpfr_mul(r47583, r47581, r47582, MPFR_RNDN);
        return mpfr_get_d(r47583, MPFR_RNDN);
}

static mpfr_t r47584, r47585, r47586, r47587, r47588, r47589, r47590, r47591, r47592, r47593, r47594, r47595, r47596, r47597, r47598;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47584);
        mpfr_init_set_str(r47585, "-28.696850627339362", 10, MPFR_RNDN);
        mpfr_init(r47586);
        mpfr_init(r47587);
        mpfr_init(r47588);
        mpfr_init(r47589);
        mpfr_init(r47590);
        mpfr_init(r47591);
        mpfr_init(r47592);
        mpfr_init_set_str(r47593, "1.2704072794546793e-51", 10, MPFR_RNDN);
        mpfr_init(r47594);
        mpfr_init(r47595);
        mpfr_init(r47596);
        mpfr_init(r47597);
        mpfr_init(r47598);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r47584, y, MPFR_RNDN);
        ;
        mpfr_set_si(r47586, mpfr_cmp(r47584, r47585) <= 0, MPFR_RNDN);
        mpfr_set_d(r47587, t, MPFR_RNDN);
        mpfr_mul(r47588, r47587, r47584, MPFR_RNDN);
        mpfr_set_d(r47589, x, MPFR_RNDN);
        mpfr_set_d(r47590, z, MPFR_RNDN);
        mpfr_sub(r47591, r47589, r47590, MPFR_RNDN);
        mpfr_mul(r47592, r47588, r47591, MPFR_RNDN);
        ;
        mpfr_set_si(r47594, mpfr_cmp(r47584, r47593) <= 0, MPFR_RNDN);
        mpfr_mul(r47595, r47584, r47591, MPFR_RNDN);
        mpfr_mul(r47596, r47587, r47595, MPFR_RNDN);
        if (mpfr_get_si(r47594, MPFR_RNDN)) { mpfr_set(r47597, r47596, MPFR_RNDN); } else { mpfr_set(r47597, r47592, MPFR_RNDN); };
        if (mpfr_get_si(r47586, MPFR_RNDN)) { mpfr_set(r47598, r47592, MPFR_RNDN); } else { mpfr_set(r47598, r47597, MPFR_RNDN); };
        return mpfr_get_d(r47598, MPFR_RNDN);
}

static mpfr_t r47599, r47600, r47601, r47602, r47603, r47604, r47605, r47606, r47607, r47608, r47609, r47610, r47611, r47612, r47613;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47599);
        mpfr_init_set_str(r47600, "-28.696850627339362", 10, MPFR_RNDN);
        mpfr_init(r47601);
        mpfr_init(r47602);
        mpfr_init(r47603);
        mpfr_init(r47604);
        mpfr_init(r47605);
        mpfr_init(r47606);
        mpfr_init(r47607);
        mpfr_init_set_str(r47608, "1.2704072794546793e-51", 10, MPFR_RNDN);
        mpfr_init(r47609);
        mpfr_init(r47610);
        mpfr_init(r47611);
        mpfr_init(r47612);
        mpfr_init(r47613);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r47599, y, MPFR_RNDN);
        ;
        mpfr_set_si(r47601, mpfr_cmp(r47599, r47600) <= 0, MPFR_RNDN);
        mpfr_set_d(r47602, t, MPFR_RNDN);
        mpfr_mul(r47603, r47602, r47599, MPFR_RNDN);
        mpfr_set_d(r47604, x, MPFR_RNDN);
        mpfr_set_d(r47605, z, MPFR_RNDN);
        mpfr_sub(r47606, r47604, r47605, MPFR_RNDN);
        mpfr_mul(r47607, r47603, r47606, MPFR_RNDN);
        ;
        mpfr_set_si(r47609, mpfr_cmp(r47599, r47608) <= 0, MPFR_RNDN);
        mpfr_mul(r47610, r47599, r47606, MPFR_RNDN);
        mpfr_mul(r47611, r47602, r47610, MPFR_RNDN);
        if (mpfr_get_si(r47609, MPFR_RNDN)) { mpfr_set(r47612, r47611, MPFR_RNDN); } else { mpfr_set(r47612, r47607, MPFR_RNDN); };
        if (mpfr_get_si(r47601, MPFR_RNDN)) { mpfr_set(r47613, r47607, MPFR_RNDN); } else { mpfr_set(r47613, r47612, MPFR_RNDN); };
        return mpfr_get_d(r47613, MPFR_RNDN);
}

