#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 r48002 = x;
        float r48003 = y;
        float r48004 = r48002 * r48003;
        float r48005 = z;
        float r48006 = r48005 * r48003;
        float r48007 = r48004 - r48006;
        float r48008 = t;
        float r48009 = r48007 * r48008;
        return r48009;
}

double f_id(double x, double y, double z, double t) {
        double r48010 = x;
        double r48011 = y;
        double r48012 = r48010 * r48011;
        double r48013 = z;
        double r48014 = r48013 * r48011;
        double r48015 = r48012 - r48014;
        double r48016 = t;
        double r48017 = r48015 * r48016;
        return r48017;
}


double f_of(float x, float y, float z, float t) {
        float r48018 = y;
        float r48019 = -28.696850627339362;
        bool r48020 = r48018 <= r48019;
        float r48021 = t;
        float r48022 = r48021 * r48018;
        float r48023 = x;
        float r48024 = z;
        float r48025 = r48023 - r48024;
        float r48026 = r48022 * r48025;
        float r48027 = 1.2704072794546793e-51;
        bool r48028 = r48018 <= r48027;
        float r48029 = r48018 * r48025;
        float r48030 = r48021 * r48029;
        float r48031 = r48028 ? r48030 : r48026;
        float r48032 = r48020 ? r48026 : r48031;
        return r48032;
}

double f_od(double x, double y, double z, double t) {
        double r48033 = y;
        double r48034 = -28.696850627339362;
        bool r48035 = r48033 <= r48034;
        double r48036 = t;
        double r48037 = r48036 * r48033;
        double r48038 = x;
        double r48039 = z;
        double r48040 = r48038 - r48039;
        double r48041 = r48037 * r48040;
        double r48042 = 1.2704072794546793e-51;
        bool r48043 = r48033 <= r48042;
        double r48044 = r48033 * r48040;
        double r48045 = r48036 * r48044;
        double r48046 = r48043 ? r48045 : r48041;
        double r48047 = r48035 ? r48041 : r48046;
        return r48047;
}

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 r48048, r48049, r48050, r48051, r48052, r48053, r48054, r48055;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r48048);
        mpfr_init(r48049);
        mpfr_init(r48050);
        mpfr_init(r48051);
        mpfr_init(r48052);
        mpfr_init(r48053);
        mpfr_init(r48054);
        mpfr_init(r48055);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r48048, x, MPFR_RNDN);
        mpfr_set_d(r48049, y, MPFR_RNDN);
        mpfr_mul(r48050, r48048, r48049, MPFR_RNDN);
        mpfr_set_d(r48051, z, MPFR_RNDN);
        mpfr_mul(r48052, r48051, r48049, MPFR_RNDN);
        mpfr_sub(r48053, r48050, r48052, MPFR_RNDN);
        mpfr_set_d(r48054, t, MPFR_RNDN);
        mpfr_mul(r48055, r48053, r48054, MPFR_RNDN);
        return mpfr_get_d(r48055, MPFR_RNDN);
}

static mpfr_t r48056, r48057, r48058, r48059, r48060, r48061, r48062, r48063, r48064, r48065, r48066, r48067, r48068, r48069, r48070;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r48056);
        mpfr_init_set_str(r48057, "-28.696850627339362", 10, MPFR_RNDN);
        mpfr_init(r48058);
        mpfr_init(r48059);
        mpfr_init(r48060);
        mpfr_init(r48061);
        mpfr_init(r48062);
        mpfr_init(r48063);
        mpfr_init(r48064);
        mpfr_init_set_str(r48065, "1.2704072794546793e-51", 10, MPFR_RNDN);
        mpfr_init(r48066);
        mpfr_init(r48067);
        mpfr_init(r48068);
        mpfr_init(r48069);
        mpfr_init(r48070);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r48056, y, MPFR_RNDN);
        ;
        mpfr_set_si(r48058, mpfr_cmp(r48056, r48057) <= 0, MPFR_RNDN);
        mpfr_set_d(r48059, t, MPFR_RNDN);
        mpfr_mul(r48060, r48059, r48056, MPFR_RNDN);
        mpfr_set_d(r48061, x, MPFR_RNDN);
        mpfr_set_d(r48062, z, MPFR_RNDN);
        mpfr_sub(r48063, r48061, r48062, MPFR_RNDN);
        mpfr_mul(r48064, r48060, r48063, MPFR_RNDN);
        ;
        mpfr_set_si(r48066, mpfr_cmp(r48056, r48065) <= 0, MPFR_RNDN);
        mpfr_mul(r48067, r48056, r48063, MPFR_RNDN);
        mpfr_mul(r48068, r48059, r48067, MPFR_RNDN);
        if (mpfr_get_si(r48066, MPFR_RNDN)) { mpfr_set(r48069, r48068, MPFR_RNDN); } else { mpfr_set(r48069, r48064, MPFR_RNDN); };
        if (mpfr_get_si(r48058, MPFR_RNDN)) { mpfr_set(r48070, r48064, MPFR_RNDN); } else { mpfr_set(r48070, r48069, MPFR_RNDN); };
        return mpfr_get_d(r48070, MPFR_RNDN);
}

static mpfr_t r48071, r48072, r48073, r48074, r48075, r48076, r48077, r48078, r48079, r48080, r48081, r48082, r48083, r48084, r48085;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r48071);
        mpfr_init_set_str(r48072, "-28.696850627339362", 10, MPFR_RNDN);
        mpfr_init(r48073);
        mpfr_init(r48074);
        mpfr_init(r48075);
        mpfr_init(r48076);
        mpfr_init(r48077);
        mpfr_init(r48078);
        mpfr_init(r48079);
        mpfr_init_set_str(r48080, "1.2704072794546793e-51", 10, MPFR_RNDN);
        mpfr_init(r48081);
        mpfr_init(r48082);
        mpfr_init(r48083);
        mpfr_init(r48084);
        mpfr_init(r48085);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r48071, y, MPFR_RNDN);
        ;
        mpfr_set_si(r48073, mpfr_cmp(r48071, r48072) <= 0, MPFR_RNDN);
        mpfr_set_d(r48074, t, MPFR_RNDN);
        mpfr_mul(r48075, r48074, r48071, MPFR_RNDN);
        mpfr_set_d(r48076, x, MPFR_RNDN);
        mpfr_set_d(r48077, z, MPFR_RNDN);
        mpfr_sub(r48078, r48076, r48077, MPFR_RNDN);
        mpfr_mul(r48079, r48075, r48078, MPFR_RNDN);
        ;
        mpfr_set_si(r48081, mpfr_cmp(r48071, r48080) <= 0, MPFR_RNDN);
        mpfr_mul(r48082, r48071, r48078, MPFR_RNDN);
        mpfr_mul(r48083, r48074, r48082, MPFR_RNDN);
        if (mpfr_get_si(r48081, MPFR_RNDN)) { mpfr_set(r48084, r48083, MPFR_RNDN); } else { mpfr_set(r48084, r48079, MPFR_RNDN); };
        if (mpfr_get_si(r48073, MPFR_RNDN)) { mpfr_set(r48085, r48079, MPFR_RNDN); } else { mpfr_set(r48085, r48084, MPFR_RNDN); };
        return mpfr_get_d(r48085, MPFR_RNDN);
}

