#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 r47810 = x;
        float r47811 = y;
        float r47812 = r47810 * r47811;
        float r47813 = z;
        float r47814 = r47813 * r47811;
        float r47815 = r47812 - r47814;
        float r47816 = t;
        float r47817 = r47815 * r47816;
        return r47817;
}

double f_id(double x, double y, double z, double t) {
        double r47818 = x;
        double r47819 = y;
        double r47820 = r47818 * r47819;
        double r47821 = z;
        double r47822 = r47821 * r47819;
        double r47823 = r47820 - r47822;
        double r47824 = t;
        double r47825 = r47823 * r47824;
        return r47825;
}


double f_of(float x, float y, float z, float t) {
        float r47826 = x;
        float r47827 = y;
        float r47828 = r47826 * r47827;
        float r47829 = z;
        float r47830 = r47829 * r47827;
        float r47831 = r47828 - r47830;
        float r47832 = t;
        float r47833 = r47831 * r47832;
        float r47834 = -8.133168452079859e-12;
        bool r47835 = r47833 <= r47834;
        float r47836 = r47832 * r47827;
        float r47837 = r47826 - r47829;
        float r47838 = r47836 * r47837;
        float r47839 = -4.8833559329525755e-298;
        bool r47840 = r47833 <= r47839;
        float r47841 = r47827 * r47837;
        float r47842 = r47832 * r47841;
        float r47843 = 9.3577914576289e-312;
        bool r47844 = r47833 <= r47843;
        float r47845 = 2.1694115241135858e-36;
        bool r47846 = r47833 <= r47845;
        float r47847 = r47846 ? r47842 : r47838;
        float r47848 = r47844 ? r47838 : r47847;
        float r47849 = r47840 ? r47842 : r47848;
        float r47850 = r47835 ? r47838 : r47849;
        return r47850;
}

double f_od(double x, double y, double z, double t) {
        double r47851 = x;
        double r47852 = y;
        double r47853 = r47851 * r47852;
        double r47854 = z;
        double r47855 = r47854 * r47852;
        double r47856 = r47853 - r47855;
        double r47857 = t;
        double r47858 = r47856 * r47857;
        double r47859 = -8.133168452079859e-12;
        bool r47860 = r47858 <= r47859;
        double r47861 = r47857 * r47852;
        double r47862 = r47851 - r47854;
        double r47863 = r47861 * r47862;
        double r47864 = -4.8833559329525755e-298;
        bool r47865 = r47858 <= r47864;
        double r47866 = r47852 * r47862;
        double r47867 = r47857 * r47866;
        double r47868 = 9.3577914576289e-312;
        bool r47869 = r47858 <= r47868;
        double r47870 = 2.1694115241135858e-36;
        bool r47871 = r47858 <= r47870;
        double r47872 = r47871 ? r47867 : r47863;
        double r47873 = r47869 ? r47863 : r47872;
        double r47874 = r47865 ? r47867 : r47873;
        double r47875 = r47860 ? r47863 : r47874;
        return r47875;
}

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 r47876, r47877, r47878, r47879, r47880, r47881, r47882, r47883;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r47876);
        mpfr_init(r47877);
        mpfr_init(r47878);
        mpfr_init(r47879);
        mpfr_init(r47880);
        mpfr_init(r47881);
        mpfr_init(r47882);
        mpfr_init(r47883);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r47876, x, MPFR_RNDN);
        mpfr_set_d(r47877, y, MPFR_RNDN);
        mpfr_mul(r47878, r47876, r47877, MPFR_RNDN);
        mpfr_set_d(r47879, z, MPFR_RNDN);
        mpfr_mul(r47880, r47879, r47877, MPFR_RNDN);
        mpfr_sub(r47881, r47878, r47880, MPFR_RNDN);
        mpfr_set_d(r47882, t, MPFR_RNDN);
        mpfr_mul(r47883, r47881, r47882, MPFR_RNDN);
        return mpfr_get_d(r47883, MPFR_RNDN);
}

static mpfr_t r47884, r47885, r47886, r47887, r47888, r47889, r47890, r47891, r47892, r47893, r47894, r47895, r47896, r47897, r47898, r47899, r47900, r47901, r47902, r47903, r47904, r47905, r47906, r47907, r47908;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47884);
        mpfr_init(r47885);
        mpfr_init(r47886);
        mpfr_init(r47887);
        mpfr_init(r47888);
        mpfr_init(r47889);
        mpfr_init(r47890);
        mpfr_init(r47891);
        mpfr_init_set_str(r47892, "-8.133168452079859e-12", 10, MPFR_RNDN);
        mpfr_init(r47893);
        mpfr_init(r47894);
        mpfr_init(r47895);
        mpfr_init(r47896);
        mpfr_init_set_str(r47897, "-4.8833559329525755e-298", 10, MPFR_RNDN);
        mpfr_init(r47898);
        mpfr_init(r47899);
        mpfr_init(r47900);
        mpfr_init_set_str(r47901, "9.3577914576289e-312", 10, MPFR_RNDN);
        mpfr_init(r47902);
        mpfr_init_set_str(r47903, "2.1694115241135858e-36", 10, MPFR_RNDN);
        mpfr_init(r47904);
        mpfr_init(r47905);
        mpfr_init(r47906);
        mpfr_init(r47907);
        mpfr_init(r47908);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r47884, x, MPFR_RNDN);
        mpfr_set_d(r47885, y, MPFR_RNDN);
        mpfr_mul(r47886, r47884, r47885, MPFR_RNDN);
        mpfr_set_d(r47887, z, MPFR_RNDN);
        mpfr_mul(r47888, r47887, r47885, MPFR_RNDN);
        mpfr_sub(r47889, r47886, r47888, MPFR_RNDN);
        mpfr_set_d(r47890, t, MPFR_RNDN);
        mpfr_mul(r47891, r47889, r47890, MPFR_RNDN);
        ;
        mpfr_set_si(r47893, mpfr_cmp(r47891, r47892) <= 0, MPFR_RNDN);
        mpfr_mul(r47894, r47890, r47885, MPFR_RNDN);
        mpfr_sub(r47895, r47884, r47887, MPFR_RNDN);
        mpfr_mul(r47896, r47894, r47895, MPFR_RNDN);
        ;
        mpfr_set_si(r47898, mpfr_cmp(r47891, r47897) <= 0, MPFR_RNDN);
        mpfr_mul(r47899, r47885, r47895, MPFR_RNDN);
        mpfr_mul(r47900, r47890, r47899, MPFR_RNDN);
        ;
        mpfr_set_si(r47902, mpfr_cmp(r47891, r47901) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r47904, mpfr_cmp(r47891, r47903) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r47904, MPFR_RNDN)) { mpfr_set(r47905, r47900, MPFR_RNDN); } else { mpfr_set(r47905, r47896, MPFR_RNDN); };
        if (mpfr_get_si(r47902, MPFR_RNDN)) { mpfr_set(r47906, r47896, MPFR_RNDN); } else { mpfr_set(r47906, r47905, MPFR_RNDN); };
        if (mpfr_get_si(r47898, MPFR_RNDN)) { mpfr_set(r47907, r47900, MPFR_RNDN); } else { mpfr_set(r47907, r47906, MPFR_RNDN); };
        if (mpfr_get_si(r47893, MPFR_RNDN)) { mpfr_set(r47908, r47896, MPFR_RNDN); } else { mpfr_set(r47908, r47907, MPFR_RNDN); };
        return mpfr_get_d(r47908, MPFR_RNDN);
}

static mpfr_t r47909, r47910, r47911, r47912, r47913, r47914, r47915, r47916, r47917, r47918, r47919, r47920, r47921, r47922, r47923, r47924, r47925, r47926, r47927, r47928, r47929, r47930, r47931, r47932, r47933;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47909);
        mpfr_init(r47910);
        mpfr_init(r47911);
        mpfr_init(r47912);
        mpfr_init(r47913);
        mpfr_init(r47914);
        mpfr_init(r47915);
        mpfr_init(r47916);
        mpfr_init_set_str(r47917, "-8.133168452079859e-12", 10, MPFR_RNDN);
        mpfr_init(r47918);
        mpfr_init(r47919);
        mpfr_init(r47920);
        mpfr_init(r47921);
        mpfr_init_set_str(r47922, "-4.8833559329525755e-298", 10, MPFR_RNDN);
        mpfr_init(r47923);
        mpfr_init(r47924);
        mpfr_init(r47925);
        mpfr_init_set_str(r47926, "9.3577914576289e-312", 10, MPFR_RNDN);
        mpfr_init(r47927);
        mpfr_init_set_str(r47928, "2.1694115241135858e-36", 10, MPFR_RNDN);
        mpfr_init(r47929);
        mpfr_init(r47930);
        mpfr_init(r47931);
        mpfr_init(r47932);
        mpfr_init(r47933);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r47909, x, MPFR_RNDN);
        mpfr_set_d(r47910, y, MPFR_RNDN);
        mpfr_mul(r47911, r47909, r47910, MPFR_RNDN);
        mpfr_set_d(r47912, z, MPFR_RNDN);
        mpfr_mul(r47913, r47912, r47910, MPFR_RNDN);
        mpfr_sub(r47914, r47911, r47913, MPFR_RNDN);
        mpfr_set_d(r47915, t, MPFR_RNDN);
        mpfr_mul(r47916, r47914, r47915, MPFR_RNDN);
        ;
        mpfr_set_si(r47918, mpfr_cmp(r47916, r47917) <= 0, MPFR_RNDN);
        mpfr_mul(r47919, r47915, r47910, MPFR_RNDN);
        mpfr_sub(r47920, r47909, r47912, MPFR_RNDN);
        mpfr_mul(r47921, r47919, r47920, MPFR_RNDN);
        ;
        mpfr_set_si(r47923, mpfr_cmp(r47916, r47922) <= 0, MPFR_RNDN);
        mpfr_mul(r47924, r47910, r47920, MPFR_RNDN);
        mpfr_mul(r47925, r47915, r47924, MPFR_RNDN);
        ;
        mpfr_set_si(r47927, mpfr_cmp(r47916, r47926) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r47929, mpfr_cmp(r47916, r47928) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r47929, MPFR_RNDN)) { mpfr_set(r47930, r47925, MPFR_RNDN); } else { mpfr_set(r47930, r47921, MPFR_RNDN); };
        if (mpfr_get_si(r47927, MPFR_RNDN)) { mpfr_set(r47931, r47921, MPFR_RNDN); } else { mpfr_set(r47931, r47930, MPFR_RNDN); };
        if (mpfr_get_si(r47923, MPFR_RNDN)) { mpfr_set(r47932, r47925, MPFR_RNDN); } else { mpfr_set(r47932, r47931, MPFR_RNDN); };
        if (mpfr_get_si(r47918, MPFR_RNDN)) { mpfr_set(r47933, r47921, MPFR_RNDN); } else { mpfr_set(r47933, r47932, MPFR_RNDN); };
        return mpfr_get_d(r47933, MPFR_RNDN);
}

