#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 r47056 = x;
        float r47057 = y;
        float r47058 = r47056 * r47057;
        float r47059 = z;
        float r47060 = r47059 * r47057;
        float r47061 = r47058 - r47060;
        float r47062 = t;
        float r47063 = r47061 * r47062;
        return r47063;
}

double f_id(double x, double y, double z, double t) {
        double r47064 = x;
        double r47065 = y;
        double r47066 = r47064 * r47065;
        double r47067 = z;
        double r47068 = r47067 * r47065;
        double r47069 = r47066 - r47068;
        double r47070 = t;
        double r47071 = r47069 * r47070;
        return r47071;
}


double f_of(float x, float y, float z, float t) {
        float r47072 = x;
        float r47073 = y;
        float r47074 = r47072 * r47073;
        float r47075 = z;
        float r47076 = r47075 * r47073;
        float r47077 = r47074 - r47076;
        float r47078 = t;
        float r47079 = r47077 * r47078;
        float r47080 = -8.133168452079859e-12;
        bool r47081 = r47079 <= r47080;
        float r47082 = r47078 * r47073;
        float r47083 = r47072 - r47075;
        float r47084 = r47082 * r47083;
        float r47085 = -4.8833559329525755e-298;
        bool r47086 = r47079 <= r47085;
        float r47087 = r47073 * r47083;
        float r47088 = r47078 * r47087;
        float r47089 = 9.3577914576289e-312;
        bool r47090 = r47079 <= r47089;
        float r47091 = 2.1694115241135858e-36;
        bool r47092 = r47079 <= r47091;
        float r47093 = r47092 ? r47088 : r47084;
        float r47094 = r47090 ? r47084 : r47093;
        float r47095 = r47086 ? r47088 : r47094;
        float r47096 = r47081 ? r47084 : r47095;
        return r47096;
}

double f_od(double x, double y, double z, double t) {
        double r47097 = x;
        double r47098 = y;
        double r47099 = r47097 * r47098;
        double r47100 = z;
        double r47101 = r47100 * r47098;
        double r47102 = r47099 - r47101;
        double r47103 = t;
        double r47104 = r47102 * r47103;
        double r47105 = -8.133168452079859e-12;
        bool r47106 = r47104 <= r47105;
        double r47107 = r47103 * r47098;
        double r47108 = r47097 - r47100;
        double r47109 = r47107 * r47108;
        double r47110 = -4.8833559329525755e-298;
        bool r47111 = r47104 <= r47110;
        double r47112 = r47098 * r47108;
        double r47113 = r47103 * r47112;
        double r47114 = 9.3577914576289e-312;
        bool r47115 = r47104 <= r47114;
        double r47116 = 2.1694115241135858e-36;
        bool r47117 = r47104 <= r47116;
        double r47118 = r47117 ? r47113 : r47109;
        double r47119 = r47115 ? r47109 : r47118;
        double r47120 = r47111 ? r47113 : r47119;
        double r47121 = r47106 ? r47109 : r47120;
        return r47121;
}

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 r47122, r47123, r47124, r47125, r47126, r47127, r47128, r47129;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r47122);
        mpfr_init(r47123);
        mpfr_init(r47124);
        mpfr_init(r47125);
        mpfr_init(r47126);
        mpfr_init(r47127);
        mpfr_init(r47128);
        mpfr_init(r47129);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r47122, x, MPFR_RNDN);
        mpfr_set_d(r47123, y, MPFR_RNDN);
        mpfr_mul(r47124, r47122, r47123, MPFR_RNDN);
        mpfr_set_d(r47125, z, MPFR_RNDN);
        mpfr_mul(r47126, r47125, r47123, MPFR_RNDN);
        mpfr_sub(r47127, r47124, r47126, MPFR_RNDN);
        mpfr_set_d(r47128, t, MPFR_RNDN);
        mpfr_mul(r47129, r47127, r47128, MPFR_RNDN);
        return mpfr_get_d(r47129, MPFR_RNDN);
}

static mpfr_t r47130, r47131, r47132, r47133, r47134, r47135, r47136, r47137, r47138, r47139, r47140, r47141, r47142, r47143, r47144, r47145, r47146, r47147, r47148, r47149, r47150, r47151, r47152, r47153, r47154;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47130);
        mpfr_init(r47131);
        mpfr_init(r47132);
        mpfr_init(r47133);
        mpfr_init(r47134);
        mpfr_init(r47135);
        mpfr_init(r47136);
        mpfr_init(r47137);
        mpfr_init_set_str(r47138, "-8.133168452079859e-12", 10, MPFR_RNDN);
        mpfr_init(r47139);
        mpfr_init(r47140);
        mpfr_init(r47141);
        mpfr_init(r47142);
        mpfr_init_set_str(r47143, "-4.8833559329525755e-298", 10, MPFR_RNDN);
        mpfr_init(r47144);
        mpfr_init(r47145);
        mpfr_init(r47146);
        mpfr_init_set_str(r47147, "9.3577914576289e-312", 10, MPFR_RNDN);
        mpfr_init(r47148);
        mpfr_init_set_str(r47149, "2.1694115241135858e-36", 10, MPFR_RNDN);
        mpfr_init(r47150);
        mpfr_init(r47151);
        mpfr_init(r47152);
        mpfr_init(r47153);
        mpfr_init(r47154);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r47130, x, MPFR_RNDN);
        mpfr_set_d(r47131, y, MPFR_RNDN);
        mpfr_mul(r47132, r47130, r47131, MPFR_RNDN);
        mpfr_set_d(r47133, z, MPFR_RNDN);
        mpfr_mul(r47134, r47133, r47131, MPFR_RNDN);
        mpfr_sub(r47135, r47132, r47134, MPFR_RNDN);
        mpfr_set_d(r47136, t, MPFR_RNDN);
        mpfr_mul(r47137, r47135, r47136, MPFR_RNDN);
        ;
        mpfr_set_si(r47139, mpfr_cmp(r47137, r47138) <= 0, MPFR_RNDN);
        mpfr_mul(r47140, r47136, r47131, MPFR_RNDN);
        mpfr_sub(r47141, r47130, r47133, MPFR_RNDN);
        mpfr_mul(r47142, r47140, r47141, MPFR_RNDN);
        ;
        mpfr_set_si(r47144, mpfr_cmp(r47137, r47143) <= 0, MPFR_RNDN);
        mpfr_mul(r47145, r47131, r47141, MPFR_RNDN);
        mpfr_mul(r47146, r47136, r47145, MPFR_RNDN);
        ;
        mpfr_set_si(r47148, mpfr_cmp(r47137, r47147) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r47150, mpfr_cmp(r47137, r47149) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r47150, MPFR_RNDN)) { mpfr_set(r47151, r47146, MPFR_RNDN); } else { mpfr_set(r47151, r47142, MPFR_RNDN); };
        if (mpfr_get_si(r47148, MPFR_RNDN)) { mpfr_set(r47152, r47142, MPFR_RNDN); } else { mpfr_set(r47152, r47151, MPFR_RNDN); };
        if (mpfr_get_si(r47144, MPFR_RNDN)) { mpfr_set(r47153, r47146, MPFR_RNDN); } else { mpfr_set(r47153, r47152, MPFR_RNDN); };
        if (mpfr_get_si(r47139, MPFR_RNDN)) { mpfr_set(r47154, r47142, MPFR_RNDN); } else { mpfr_set(r47154, r47153, MPFR_RNDN); };
        return mpfr_get_d(r47154, MPFR_RNDN);
}

static mpfr_t r47155, r47156, r47157, r47158, r47159, r47160, r47161, r47162, r47163, r47164, r47165, r47166, r47167, r47168, r47169, r47170, r47171, r47172, r47173, r47174, r47175, r47176, r47177, r47178, r47179;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47155);
        mpfr_init(r47156);
        mpfr_init(r47157);
        mpfr_init(r47158);
        mpfr_init(r47159);
        mpfr_init(r47160);
        mpfr_init(r47161);
        mpfr_init(r47162);
        mpfr_init_set_str(r47163, "-8.133168452079859e-12", 10, MPFR_RNDN);
        mpfr_init(r47164);
        mpfr_init(r47165);
        mpfr_init(r47166);
        mpfr_init(r47167);
        mpfr_init_set_str(r47168, "-4.8833559329525755e-298", 10, MPFR_RNDN);
        mpfr_init(r47169);
        mpfr_init(r47170);
        mpfr_init(r47171);
        mpfr_init_set_str(r47172, "9.3577914576289e-312", 10, MPFR_RNDN);
        mpfr_init(r47173);
        mpfr_init_set_str(r47174, "2.1694115241135858e-36", 10, MPFR_RNDN);
        mpfr_init(r47175);
        mpfr_init(r47176);
        mpfr_init(r47177);
        mpfr_init(r47178);
        mpfr_init(r47179);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r47155, x, MPFR_RNDN);
        mpfr_set_d(r47156, y, MPFR_RNDN);
        mpfr_mul(r47157, r47155, r47156, MPFR_RNDN);
        mpfr_set_d(r47158, z, MPFR_RNDN);
        mpfr_mul(r47159, r47158, r47156, MPFR_RNDN);
        mpfr_sub(r47160, r47157, r47159, MPFR_RNDN);
        mpfr_set_d(r47161, t, MPFR_RNDN);
        mpfr_mul(r47162, r47160, r47161, MPFR_RNDN);
        ;
        mpfr_set_si(r47164, mpfr_cmp(r47162, r47163) <= 0, MPFR_RNDN);
        mpfr_mul(r47165, r47161, r47156, MPFR_RNDN);
        mpfr_sub(r47166, r47155, r47158, MPFR_RNDN);
        mpfr_mul(r47167, r47165, r47166, MPFR_RNDN);
        ;
        mpfr_set_si(r47169, mpfr_cmp(r47162, r47168) <= 0, MPFR_RNDN);
        mpfr_mul(r47170, r47156, r47166, MPFR_RNDN);
        mpfr_mul(r47171, r47161, r47170, MPFR_RNDN);
        ;
        mpfr_set_si(r47173, mpfr_cmp(r47162, r47172) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r47175, mpfr_cmp(r47162, r47174) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r47175, MPFR_RNDN)) { mpfr_set(r47176, r47171, MPFR_RNDN); } else { mpfr_set(r47176, r47167, MPFR_RNDN); };
        if (mpfr_get_si(r47173, MPFR_RNDN)) { mpfr_set(r47177, r47167, MPFR_RNDN); } else { mpfr_set(r47177, r47176, MPFR_RNDN); };
        if (mpfr_get_si(r47169, MPFR_RNDN)) { mpfr_set(r47178, r47171, MPFR_RNDN); } else { mpfr_set(r47178, r47177, MPFR_RNDN); };
        if (mpfr_get_si(r47164, MPFR_RNDN)) { mpfr_set(r47179, r47167, MPFR_RNDN); } else { mpfr_set(r47179, r47178, MPFR_RNDN); };
        return mpfr_get_d(r47179, MPFR_RNDN);
}

