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

char *name = "Linear.Projection:infinitePerspective from linear-1.19.1.3, A";

double f_if(float x, float y, float z, float t) {
        float r44991 = x;
        float r44992 = 2.0f;
        float r44993 = r44991 * r44992;
        float r44994 = y;
        float r44995 = z;
        float r44996 = r44994 * r44995;
        float r44997 = t;
        float r44998 = r44997 * r44995;
        float r44999 = r44996 - r44998;
        float r45000 = r44993 / r44999;
        return r45000;
}

double f_id(double x, double y, double z, double t) {
        double r45001 = x;
        double r45002 = 2.0;
        double r45003 = r45001 * r45002;
        double r45004 = y;
        double r45005 = z;
        double r45006 = r45004 * r45005;
        double r45007 = t;
        double r45008 = r45007 * r45005;
        double r45009 = r45006 - r45008;
        double r45010 = r45003 / r45009;
        return r45010;
}


double f_of(float x, float y, float z, float t) {
        float r45011 = x;
        float r45012 = 2.0f;
        float r45013 = r45011 * r45012;
        float r45014 = y;
        float r45015 = z;
        float r45016 = r45014 * r45015;
        float r45017 = t;
        float r45018 = r45017 * r45015;
        float r45019 = r45016 - r45018;
        float r45020 = r45013 / r45019;
        float r45021 = -0.0f;
        bool r45022 = r45020 <= r45021;
        float r45023 = 1.0f;
        float r45024 = r45014 - r45017;
        float r45025 = r45011 / r45015;
        float r45026 = r45024 / r45025;
        float r45027 = r45023 / r45026;
        float r45028 = r45027 * r45012;
        float r45029 = r45024 * r45015;
        float r45030 = r45011 / r45029;
        float r45031 = r45030 * r45012;
        float r45032 = r45022 ? r45028 : r45031;
        return r45032;
}

double f_od(double x, double y, double z, double t) {
        double r45033 = x;
        double r45034 = 2.0;
        double r45035 = r45033 * r45034;
        double r45036 = y;
        double r45037 = z;
        double r45038 = r45036 * r45037;
        double r45039 = t;
        double r45040 = r45039 * r45037;
        double r45041 = r45038 - r45040;
        double r45042 = r45035 / r45041;
        double r45043 = -0.0;
        bool r45044 = r45042 <= r45043;
        double r45045 = 1.0;
        double r45046 = r45036 - r45039;
        double r45047 = r45033 / r45037;
        double r45048 = r45046 / r45047;
        double r45049 = r45045 / r45048;
        double r45050 = r45049 * r45034;
        double r45051 = r45046 * r45037;
        double r45052 = r45033 / r45051;
        double r45053 = r45052 * r45034;
        double r45054 = r45044 ? r45050 : r45053;
        return r45054;
}

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 r45055, r45056, r45057, r45058, r45059, r45060, r45061, r45062, r45063, r45064;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r45055);
        mpfr_init_set_str(r45056, "2.0", 10, MPFR_RNDN);
        mpfr_init(r45057);
        mpfr_init(r45058);
        mpfr_init(r45059);
        mpfr_init(r45060);
        mpfr_init(r45061);
        mpfr_init(r45062);
        mpfr_init(r45063);
        mpfr_init(r45064);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r45055, x, MPFR_RNDN);
        ;
        mpfr_mul(r45057, r45055, r45056, MPFR_RNDN);
        mpfr_set_d(r45058, y, MPFR_RNDN);
        mpfr_set_d(r45059, z, MPFR_RNDN);
        mpfr_mul(r45060, r45058, r45059, MPFR_RNDN);
        mpfr_set_d(r45061, t, MPFR_RNDN);
        mpfr_mul(r45062, r45061, r45059, MPFR_RNDN);
        mpfr_sub(r45063, r45060, r45062, MPFR_RNDN);
        mpfr_div(r45064, r45057, r45063, MPFR_RNDN);
        return mpfr_get_d(r45064, MPFR_RNDN);
}

static mpfr_t r45065, r45066, r45067, r45068, r45069, r45070, r45071, r45072, r45073, r45074, r45075, r45076, r45077, r45078, r45079, r45080, r45081, r45082, r45083, r45084, r45085, r45086;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r45065);
        mpfr_init_set_str(r45066, "2.0", 10, MPFR_RNDN);
        mpfr_init(r45067);
        mpfr_init(r45068);
        mpfr_init(r45069);
        mpfr_init(r45070);
        mpfr_init(r45071);
        mpfr_init(r45072);
        mpfr_init(r45073);
        mpfr_init(r45074);
        mpfr_init_set_str(r45075, "-0.0", 10, MPFR_RNDN);
        mpfr_init(r45076);
        mpfr_init_set_str(r45077, "1", 10, MPFR_RNDN);
        mpfr_init(r45078);
        mpfr_init(r45079);
        mpfr_init(r45080);
        mpfr_init(r45081);
        mpfr_init(r45082);
        mpfr_init(r45083);
        mpfr_init(r45084);
        mpfr_init(r45085);
        mpfr_init(r45086);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r45065, x, MPFR_RNDN);
        ;
        mpfr_mul(r45067, r45065, r45066, MPFR_RNDN);
        mpfr_set_d(r45068, y, MPFR_RNDN);
        mpfr_set_d(r45069, z, MPFR_RNDN);
        mpfr_mul(r45070, r45068, r45069, MPFR_RNDN);
        mpfr_set_d(r45071, t, MPFR_RNDN);
        mpfr_mul(r45072, r45071, r45069, MPFR_RNDN);
        mpfr_sub(r45073, r45070, r45072, MPFR_RNDN);
        mpfr_div(r45074, r45067, r45073, MPFR_RNDN);
        ;
        mpfr_set_si(r45076, mpfr_cmp(r45074, r45075) <= 0, MPFR_RNDN);
        ;
        mpfr_sub(r45078, r45068, r45071, MPFR_RNDN);
        mpfr_div(r45079, r45065, r45069, MPFR_RNDN);
        mpfr_div(r45080, r45078, r45079, MPFR_RNDN);
        mpfr_div(r45081, r45077, r45080, MPFR_RNDN);
        mpfr_mul(r45082, r45081, r45066, MPFR_RNDN);
        mpfr_mul(r45083, r45078, r45069, MPFR_RNDN);
        mpfr_div(r45084, r45065, r45083, MPFR_RNDN);
        mpfr_mul(r45085, r45084, r45066, MPFR_RNDN);
        if (mpfr_get_si(r45076, MPFR_RNDN)) { mpfr_set(r45086, r45082, MPFR_RNDN); } else { mpfr_set(r45086, r45085, MPFR_RNDN); };
        return mpfr_get_d(r45086, MPFR_RNDN);
}

static mpfr_t r45087, r45088, r45089, r45090, r45091, r45092, r45093, r45094, r45095, r45096, r45097, r45098, r45099, r45100, r45101, r45102, r45103, r45104, r45105, r45106, r45107, r45108;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r45087);
        mpfr_init_set_str(r45088, "2.0", 10, MPFR_RNDN);
        mpfr_init(r45089);
        mpfr_init(r45090);
        mpfr_init(r45091);
        mpfr_init(r45092);
        mpfr_init(r45093);
        mpfr_init(r45094);
        mpfr_init(r45095);
        mpfr_init(r45096);
        mpfr_init_set_str(r45097, "-0.0", 10, MPFR_RNDN);
        mpfr_init(r45098);
        mpfr_init_set_str(r45099, "1", 10, MPFR_RNDN);
        mpfr_init(r45100);
        mpfr_init(r45101);
        mpfr_init(r45102);
        mpfr_init(r45103);
        mpfr_init(r45104);
        mpfr_init(r45105);
        mpfr_init(r45106);
        mpfr_init(r45107);
        mpfr_init(r45108);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r45087, x, MPFR_RNDN);
        ;
        mpfr_mul(r45089, r45087, r45088, MPFR_RNDN);
        mpfr_set_d(r45090, y, MPFR_RNDN);
        mpfr_set_d(r45091, z, MPFR_RNDN);
        mpfr_mul(r45092, r45090, r45091, MPFR_RNDN);
        mpfr_set_d(r45093, t, MPFR_RNDN);
        mpfr_mul(r45094, r45093, r45091, MPFR_RNDN);
        mpfr_sub(r45095, r45092, r45094, MPFR_RNDN);
        mpfr_div(r45096, r45089, r45095, MPFR_RNDN);
        ;
        mpfr_set_si(r45098, mpfr_cmp(r45096, r45097) <= 0, MPFR_RNDN);
        ;
        mpfr_sub(r45100, r45090, r45093, MPFR_RNDN);
        mpfr_div(r45101, r45087, r45091, MPFR_RNDN);
        mpfr_div(r45102, r45100, r45101, MPFR_RNDN);
        mpfr_div(r45103, r45099, r45102, MPFR_RNDN);
        mpfr_mul(r45104, r45103, r45088, MPFR_RNDN);
        mpfr_mul(r45105, r45100, r45091, MPFR_RNDN);
        mpfr_div(r45106, r45087, r45105, MPFR_RNDN);
        mpfr_mul(r45107, r45106, r45088, MPFR_RNDN);
        if (mpfr_get_si(r45098, MPFR_RNDN)) { mpfr_set(r45108, r45104, MPFR_RNDN); } else { mpfr_set(r45108, r45107, MPFR_RNDN); };
        return mpfr_get_d(r45108, MPFR_RNDN);
}

