#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 r47829 = x;
        float r47830 = y;
        float r47831 = r47829 * r47830;
        float r47832 = z;
        float r47833 = r47832 * r47830;
        float r47834 = r47831 - r47833;
        float r47835 = t;
        float r47836 = r47834 * r47835;
        return r47836;
}

double f_id(double x, double y, double z, double t) {
        double r47837 = x;
        double r47838 = y;
        double r47839 = r47837 * r47838;
        double r47840 = z;
        double r47841 = r47840 * r47838;
        double r47842 = r47839 - r47841;
        double r47843 = t;
        double r47844 = r47842 * r47843;
        return r47844;
}


double f_of(float x, float y, float z, float t) {
        float r47845 = x;
        float r47846 = y;
        float r47847 = r47845 * r47846;
        float r47848 = z;
        float r47849 = r47848 * r47846;
        float r47850 = r47847 - r47849;
        float r47851 = t;
        float r47852 = r47850 * r47851;
        float r47853 = -8.133168452079859e-12;
        bool r47854 = r47852 <= r47853;
        float r47855 = r47851 * r47846;
        float r47856 = r47845 - r47848;
        float r47857 = r47855 * r47856;
        float r47858 = -4.8833559329525755e-298;
        bool r47859 = r47852 <= r47858;
        float r47860 = r47846 * r47856;
        float r47861 = r47851 * r47860;
        float r47862 = 9.3577914576289e-312;
        bool r47863 = r47852 <= r47862;
        float r47864 = 2.1694115241135858e-36;
        bool r47865 = r47852 <= r47864;
        float r47866 = r47865 ? r47861 : r47857;
        float r47867 = r47863 ? r47857 : r47866;
        float r47868 = r47859 ? r47861 : r47867;
        float r47869 = r47854 ? r47857 : r47868;
        return r47869;
}

double f_od(double x, double y, double z, double t) {
        double r47870 = x;
        double r47871 = y;
        double r47872 = r47870 * r47871;
        double r47873 = z;
        double r47874 = r47873 * r47871;
        double r47875 = r47872 - r47874;
        double r47876 = t;
        double r47877 = r47875 * r47876;
        double r47878 = -8.133168452079859e-12;
        bool r47879 = r47877 <= r47878;
        double r47880 = r47876 * r47871;
        double r47881 = r47870 - r47873;
        double r47882 = r47880 * r47881;
        double r47883 = -4.8833559329525755e-298;
        bool r47884 = r47877 <= r47883;
        double r47885 = r47871 * r47881;
        double r47886 = r47876 * r47885;
        double r47887 = 9.3577914576289e-312;
        bool r47888 = r47877 <= r47887;
        double r47889 = 2.1694115241135858e-36;
        bool r47890 = r47877 <= r47889;
        double r47891 = r47890 ? r47886 : r47882;
        double r47892 = r47888 ? r47882 : r47891;
        double r47893 = r47884 ? r47886 : r47892;
        double r47894 = r47879 ? r47882 : r47893;
        return r47894;
}

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 r47895, r47896, r47897, r47898, r47899, r47900, r47901, r47902;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r47895);
        mpfr_init(r47896);
        mpfr_init(r47897);
        mpfr_init(r47898);
        mpfr_init(r47899);
        mpfr_init(r47900);
        mpfr_init(r47901);
        mpfr_init(r47902);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r47895, x, MPFR_RNDN);
        mpfr_set_d(r47896, y, MPFR_RNDN);
        mpfr_mul(r47897, r47895, r47896, MPFR_RNDN);
        mpfr_set_d(r47898, z, MPFR_RNDN);
        mpfr_mul(r47899, r47898, r47896, MPFR_RNDN);
        mpfr_sub(r47900, r47897, r47899, MPFR_RNDN);
        mpfr_set_d(r47901, t, MPFR_RNDN);
        mpfr_mul(r47902, r47900, r47901, MPFR_RNDN);
        return mpfr_get_d(r47902, MPFR_RNDN);
}

static mpfr_t r47903, r47904, r47905, r47906, r47907, r47908, r47909, r47910, r47911, r47912, r47913, r47914, r47915, r47916, r47917, r47918, r47919, r47920, r47921, r47922, r47923, r47924, r47925, r47926, r47927;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47903);
        mpfr_init(r47904);
        mpfr_init(r47905);
        mpfr_init(r47906);
        mpfr_init(r47907);
        mpfr_init(r47908);
        mpfr_init(r47909);
        mpfr_init(r47910);
        mpfr_init_set_str(r47911, "-8.133168452079859e-12", 10, MPFR_RNDN);
        mpfr_init(r47912);
        mpfr_init(r47913);
        mpfr_init(r47914);
        mpfr_init(r47915);
        mpfr_init_set_str(r47916, "-4.8833559329525755e-298", 10, MPFR_RNDN);
        mpfr_init(r47917);
        mpfr_init(r47918);
        mpfr_init(r47919);
        mpfr_init_set_str(r47920, "9.3577914576289e-312", 10, MPFR_RNDN);
        mpfr_init(r47921);
        mpfr_init_set_str(r47922, "2.1694115241135858e-36", 10, MPFR_RNDN);
        mpfr_init(r47923);
        mpfr_init(r47924);
        mpfr_init(r47925);
        mpfr_init(r47926);
        mpfr_init(r47927);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r47903, x, MPFR_RNDN);
        mpfr_set_d(r47904, y, MPFR_RNDN);
        mpfr_mul(r47905, r47903, r47904, MPFR_RNDN);
        mpfr_set_d(r47906, z, MPFR_RNDN);
        mpfr_mul(r47907, r47906, r47904, MPFR_RNDN);
        mpfr_sub(r47908, r47905, r47907, MPFR_RNDN);
        mpfr_set_d(r47909, t, MPFR_RNDN);
        mpfr_mul(r47910, r47908, r47909, MPFR_RNDN);
        ;
        mpfr_set_si(r47912, mpfr_cmp(r47910, r47911) <= 0, MPFR_RNDN);
        mpfr_mul(r47913, r47909, r47904, MPFR_RNDN);
        mpfr_sub(r47914, r47903, r47906, MPFR_RNDN);
        mpfr_mul(r47915, r47913, r47914, MPFR_RNDN);
        ;
        mpfr_set_si(r47917, mpfr_cmp(r47910, r47916) <= 0, MPFR_RNDN);
        mpfr_mul(r47918, r47904, r47914, MPFR_RNDN);
        mpfr_mul(r47919, r47909, r47918, MPFR_RNDN);
        ;
        mpfr_set_si(r47921, mpfr_cmp(r47910, r47920) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r47923, mpfr_cmp(r47910, r47922) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r47923, MPFR_RNDN)) { mpfr_set(r47924, r47919, MPFR_RNDN); } else { mpfr_set(r47924, r47915, MPFR_RNDN); };
        if (mpfr_get_si(r47921, MPFR_RNDN)) { mpfr_set(r47925, r47915, MPFR_RNDN); } else { mpfr_set(r47925, r47924, MPFR_RNDN); };
        if (mpfr_get_si(r47917, MPFR_RNDN)) { mpfr_set(r47926, r47919, MPFR_RNDN); } else { mpfr_set(r47926, r47925, MPFR_RNDN); };
        if (mpfr_get_si(r47912, MPFR_RNDN)) { mpfr_set(r47927, r47915, MPFR_RNDN); } else { mpfr_set(r47927, r47926, MPFR_RNDN); };
        return mpfr_get_d(r47927, MPFR_RNDN);
}

static mpfr_t r47928, r47929, r47930, r47931, r47932, r47933, r47934, r47935, r47936, r47937, r47938, r47939, r47940, r47941, r47942, r47943, r47944, r47945, r47946, r47947, r47948, r47949, r47950, r47951, r47952;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r47928);
        mpfr_init(r47929);
        mpfr_init(r47930);
        mpfr_init(r47931);
        mpfr_init(r47932);
        mpfr_init(r47933);
        mpfr_init(r47934);
        mpfr_init(r47935);
        mpfr_init_set_str(r47936, "-8.133168452079859e-12", 10, MPFR_RNDN);
        mpfr_init(r47937);
        mpfr_init(r47938);
        mpfr_init(r47939);
        mpfr_init(r47940);
        mpfr_init_set_str(r47941, "-4.8833559329525755e-298", 10, MPFR_RNDN);
        mpfr_init(r47942);
        mpfr_init(r47943);
        mpfr_init(r47944);
        mpfr_init_set_str(r47945, "9.3577914576289e-312", 10, MPFR_RNDN);
        mpfr_init(r47946);
        mpfr_init_set_str(r47947, "2.1694115241135858e-36", 10, MPFR_RNDN);
        mpfr_init(r47948);
        mpfr_init(r47949);
        mpfr_init(r47950);
        mpfr_init(r47951);
        mpfr_init(r47952);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r47928, x, MPFR_RNDN);
        mpfr_set_d(r47929, y, MPFR_RNDN);
        mpfr_mul(r47930, r47928, r47929, MPFR_RNDN);
        mpfr_set_d(r47931, z, MPFR_RNDN);
        mpfr_mul(r47932, r47931, r47929, MPFR_RNDN);
        mpfr_sub(r47933, r47930, r47932, MPFR_RNDN);
        mpfr_set_d(r47934, t, MPFR_RNDN);
        mpfr_mul(r47935, r47933, r47934, MPFR_RNDN);
        ;
        mpfr_set_si(r47937, mpfr_cmp(r47935, r47936) <= 0, MPFR_RNDN);
        mpfr_mul(r47938, r47934, r47929, MPFR_RNDN);
        mpfr_sub(r47939, r47928, r47931, MPFR_RNDN);
        mpfr_mul(r47940, r47938, r47939, MPFR_RNDN);
        ;
        mpfr_set_si(r47942, mpfr_cmp(r47935, r47941) <= 0, MPFR_RNDN);
        mpfr_mul(r47943, r47929, r47939, MPFR_RNDN);
        mpfr_mul(r47944, r47934, r47943, MPFR_RNDN);
        ;
        mpfr_set_si(r47946, mpfr_cmp(r47935, r47945) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r47948, mpfr_cmp(r47935, r47947) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r47948, MPFR_RNDN)) { mpfr_set(r47949, r47944, MPFR_RNDN); } else { mpfr_set(r47949, r47940, MPFR_RNDN); };
        if (mpfr_get_si(r47946, MPFR_RNDN)) { mpfr_set(r47950, r47940, MPFR_RNDN); } else { mpfr_set(r47950, r47949, MPFR_RNDN); };
        if (mpfr_get_si(r47942, MPFR_RNDN)) { mpfr_set(r47951, r47944, MPFR_RNDN); } else { mpfr_set(r47951, r47950, MPFR_RNDN); };
        if (mpfr_get_si(r47937, MPFR_RNDN)) { mpfr_set(r47952, r47940, MPFR_RNDN); } else { mpfr_set(r47952, r47951, MPFR_RNDN); };
        return mpfr_get_d(r47952, MPFR_RNDN);
}

