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

char *name = "Diagrams.Solve.Tridiagonal:solveCyclicTriDiagonal from diagrams-solve-0.1, B";

double f_if(float x, float y, float z, float t, float a, float b) {
        float r53725 = x;
        float r53726 = y;
        float r53727 = z;
        float r53728 = r53726 * r53727;
        float r53729 = t;
        float r53730 = r53728 / r53729;
        float r53731 = r53725 + r53730;
        float r53732 = a;
        float r53733 = 1.0;
        float r53734 = r53732 + r53733;
        float r53735 = b;
        float r53736 = r53726 * r53735;
        float r53737 = r53736 / r53729;
        float r53738 = r53734 + r53737;
        float r53739 = r53731 / r53738;
        return r53739;
}

double f_id(double x, double y, double z, double t, double a, double b) {
        double r53740 = x;
        double r53741 = y;
        double r53742 = z;
        double r53743 = r53741 * r53742;
        double r53744 = t;
        double r53745 = r53743 / r53744;
        double r53746 = r53740 + r53745;
        double r53747 = a;
        double r53748 = 1.0;
        double r53749 = r53747 + r53748;
        double r53750 = b;
        double r53751 = r53741 * r53750;
        double r53752 = r53751 / r53744;
        double r53753 = r53749 + r53752;
        double r53754 = r53746 / r53753;
        return r53754;
}


double f_of(float x, float y, float z, float t, float a, float b) {
        float r53755 = y;
        float r53756 = -1.0283268166580833e+173;
        bool r53757 = r53755 <= r53756;
        float r53758 = x;
        float r53759 = z;
        float r53760 = t;
        float r53761 = r53759 / r53760;
        float r53762 = r53755 * r53761;
        float r53763 = r53758 + r53762;
        float r53764 = a;
        float r53765 = 1.0;
        float r53766 = r53764 - r53765;
        float r53767 = r53763 / r53766;
        float r53768 = r53765 + r53764;
        float r53769 = b;
        float r53770 = r53760 / r53769;
        float r53771 = r53768 * r53770;
        float r53772 = r53771 + r53755;
        float r53773 = r53767 / r53772;
        float r53774 = r53766 * r53770;
        float r53775 = r53773 * r53774;
        float r53776 = 5.197438555751174e+86;
        bool r53777 = r53755 <= r53776;
        float r53778 = r53760 / r53755;
        float r53779 = r53759 / r53778;
        float r53780 = r53758 + r53779;
        float r53781 = r53764 + r53765;
        float r53782 = r53755 * r53769;
        float r53783 = r53782 / r53760;
        float r53784 = r53781 + r53783;
        float r53785 = r53780 / r53784;
        float r53786 = r53777 ? r53785 : r53775;
        float r53787 = r53757 ? r53775 : r53786;
        return r53787;
}

double f_od(double x, double y, double z, double t, double a, double b) {
        double r53788 = y;
        double r53789 = -1.0283268166580833e+173;
        bool r53790 = r53788 <= r53789;
        double r53791 = x;
        double r53792 = z;
        double r53793 = t;
        double r53794 = r53792 / r53793;
        double r53795 = r53788 * r53794;
        double r53796 = r53791 + r53795;
        double r53797 = a;
        double r53798 = 1.0;
        double r53799 = r53797 - r53798;
        double r53800 = r53796 / r53799;
        double r53801 = r53798 + r53797;
        double r53802 = b;
        double r53803 = r53793 / r53802;
        double r53804 = r53801 * r53803;
        double r53805 = r53804 + r53788;
        double r53806 = r53800 / r53805;
        double r53807 = r53799 * r53803;
        double r53808 = r53806 * r53807;
        double r53809 = 5.197438555751174e+86;
        bool r53810 = r53788 <= r53809;
        double r53811 = r53793 / r53788;
        double r53812 = r53792 / r53811;
        double r53813 = r53791 + r53812;
        double r53814 = r53797 + r53798;
        double r53815 = r53788 * r53802;
        double r53816 = r53815 / r53793;
        double r53817 = r53814 + r53816;
        double r53818 = r53813 / r53817;
        double r53819 = r53810 ? r53818 : r53808;
        double r53820 = r53790 ? r53808 : r53819;
        return r53820;
}

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 r53821, r53822, r53823, r53824, r53825, r53826, r53827, r53828, r53829, r53830, r53831, r53832, r53833, r53834, r53835;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r53821);
        mpfr_init(r53822);
        mpfr_init(r53823);
        mpfr_init(r53824);
        mpfr_init(r53825);
        mpfr_init(r53826);
        mpfr_init(r53827);
        mpfr_init(r53828);
        mpfr_init_set_str(r53829, "1.0", 10, MPFR_RNDN);
        mpfr_init(r53830);
        mpfr_init(r53831);
        mpfr_init(r53832);
        mpfr_init(r53833);
        mpfr_init(r53834);
        mpfr_init(r53835);
}

double f_im(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r53821, x, MPFR_RNDN);
        mpfr_set_d(r53822, y, MPFR_RNDN);
        mpfr_set_d(r53823, z, MPFR_RNDN);
        mpfr_mul(r53824, r53822, r53823, MPFR_RNDN);
        mpfr_set_d(r53825, t, MPFR_RNDN);
        mpfr_div(r53826, r53824, r53825, MPFR_RNDN);
        mpfr_add(r53827, r53821, r53826, MPFR_RNDN);
        mpfr_set_d(r53828, a, MPFR_RNDN);
        ;
        mpfr_add(r53830, r53828, r53829, MPFR_RNDN);
        mpfr_set_d(r53831, b, MPFR_RNDN);
        mpfr_mul(r53832, r53822, r53831, MPFR_RNDN);
        mpfr_div(r53833, r53832, r53825, MPFR_RNDN);
        mpfr_add(r53834, r53830, r53833, MPFR_RNDN);
        mpfr_div(r53835, r53827, r53834, MPFR_RNDN);
        return mpfr_get_d(r53835, MPFR_RNDN);
}

static mpfr_t r53836, r53837, r53838, r53839, r53840, r53841, r53842, r53843, r53844, r53845, r53846, r53847, r53848, r53849, r53850, r53851, r53852, r53853, r53854, r53855, r53856, r53857, r53858, r53859, r53860, r53861, r53862, r53863, r53864, r53865, r53866, r53867, r53868;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53836);
        mpfr_init_set_str(r53837, "-1.0283268166580833e+173", 10, MPFR_RNDN);
        mpfr_init(r53838);
        mpfr_init(r53839);
        mpfr_init(r53840);
        mpfr_init(r53841);
        mpfr_init(r53842);
        mpfr_init(r53843);
        mpfr_init(r53844);
        mpfr_init(r53845);
        mpfr_init_set_str(r53846, "1.0", 10, MPFR_RNDN);
        mpfr_init(r53847);
        mpfr_init(r53848);
        mpfr_init(r53849);
        mpfr_init(r53850);
        mpfr_init(r53851);
        mpfr_init(r53852);
        mpfr_init(r53853);
        mpfr_init(r53854);
        mpfr_init(r53855);
        mpfr_init(r53856);
        mpfr_init_set_str(r53857, "5.197438555751174e+86", 10, MPFR_RNDN);
        mpfr_init(r53858);
        mpfr_init(r53859);
        mpfr_init(r53860);
        mpfr_init(r53861);
        mpfr_init(r53862);
        mpfr_init(r53863);
        mpfr_init(r53864);
        mpfr_init(r53865);
        mpfr_init(r53866);
        mpfr_init(r53867);
        mpfr_init(r53868);
}

double f_fm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r53836, y, MPFR_RNDN);
        ;
        mpfr_set_si(r53838, mpfr_cmp(r53836, r53837) <= 0, MPFR_RNDN);
        mpfr_set_d(r53839, x, MPFR_RNDN);
        mpfr_set_d(r53840, z, MPFR_RNDN);
        mpfr_set_d(r53841, t, MPFR_RNDN);
        mpfr_div(r53842, r53840, r53841, MPFR_RNDN);
        mpfr_mul(r53843, r53836, r53842, MPFR_RNDN);
        mpfr_add(r53844, r53839, r53843, MPFR_RNDN);
        mpfr_set_d(r53845, a, MPFR_RNDN);
        ;
        mpfr_sub(r53847, r53845, r53846, MPFR_RNDN);
        mpfr_div(r53848, r53844, r53847, MPFR_RNDN);
        mpfr_add(r53849, r53846, r53845, MPFR_RNDN);
        mpfr_set_d(r53850, b, MPFR_RNDN);
        mpfr_div(r53851, r53841, r53850, MPFR_RNDN);
        mpfr_mul(r53852, r53849, r53851, MPFR_RNDN);
        mpfr_add(r53853, r53852, r53836, MPFR_RNDN);
        mpfr_div(r53854, r53848, r53853, MPFR_RNDN);
        mpfr_mul(r53855, r53847, r53851, MPFR_RNDN);
        mpfr_mul(r53856, r53854, r53855, MPFR_RNDN);
        ;
        mpfr_set_si(r53858, mpfr_cmp(r53836, r53857) <= 0, MPFR_RNDN);
        mpfr_div(r53859, r53841, r53836, MPFR_RNDN);
        mpfr_div(r53860, r53840, r53859, MPFR_RNDN);
        mpfr_add(r53861, r53839, r53860, MPFR_RNDN);
        mpfr_add(r53862, r53845, r53846, MPFR_RNDN);
        mpfr_mul(r53863, r53836, r53850, MPFR_RNDN);
        mpfr_div(r53864, r53863, r53841, MPFR_RNDN);
        mpfr_add(r53865, r53862, r53864, MPFR_RNDN);
        mpfr_div(r53866, r53861, r53865, MPFR_RNDN);
        if (mpfr_get_si(r53858, MPFR_RNDN)) { mpfr_set(r53867, r53866, MPFR_RNDN); } else { mpfr_set(r53867, r53856, MPFR_RNDN); };
        if (mpfr_get_si(r53838, MPFR_RNDN)) { mpfr_set(r53868, r53856, MPFR_RNDN); } else { mpfr_set(r53868, r53867, MPFR_RNDN); };
        return mpfr_get_d(r53868, MPFR_RNDN);
}

static mpfr_t r53869, r53870, r53871, r53872, r53873, r53874, r53875, r53876, r53877, r53878, r53879, r53880, r53881, r53882, r53883, r53884, r53885, r53886, r53887, r53888, r53889, r53890, r53891, r53892, r53893, r53894, r53895, r53896, r53897, r53898, r53899, r53900, r53901;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53869);
        mpfr_init_set_str(r53870, "-1.0283268166580833e+173", 10, MPFR_RNDN);
        mpfr_init(r53871);
        mpfr_init(r53872);
        mpfr_init(r53873);
        mpfr_init(r53874);
        mpfr_init(r53875);
        mpfr_init(r53876);
        mpfr_init(r53877);
        mpfr_init(r53878);
        mpfr_init_set_str(r53879, "1.0", 10, MPFR_RNDN);
        mpfr_init(r53880);
        mpfr_init(r53881);
        mpfr_init(r53882);
        mpfr_init(r53883);
        mpfr_init(r53884);
        mpfr_init(r53885);
        mpfr_init(r53886);
        mpfr_init(r53887);
        mpfr_init(r53888);
        mpfr_init(r53889);
        mpfr_init_set_str(r53890, "5.197438555751174e+86", 10, MPFR_RNDN);
        mpfr_init(r53891);
        mpfr_init(r53892);
        mpfr_init(r53893);
        mpfr_init(r53894);
        mpfr_init(r53895);
        mpfr_init(r53896);
        mpfr_init(r53897);
        mpfr_init(r53898);
        mpfr_init(r53899);
        mpfr_init(r53900);
        mpfr_init(r53901);
}

double f_dm(double x, double y, double z, double t, double a, double b) {
        mpfr_set_d(r53869, y, MPFR_RNDN);
        ;
        mpfr_set_si(r53871, mpfr_cmp(r53869, r53870) <= 0, MPFR_RNDN);
        mpfr_set_d(r53872, x, MPFR_RNDN);
        mpfr_set_d(r53873, z, MPFR_RNDN);
        mpfr_set_d(r53874, t, MPFR_RNDN);
        mpfr_div(r53875, r53873, r53874, MPFR_RNDN);
        mpfr_mul(r53876, r53869, r53875, MPFR_RNDN);
        mpfr_add(r53877, r53872, r53876, MPFR_RNDN);
        mpfr_set_d(r53878, a, MPFR_RNDN);
        ;
        mpfr_sub(r53880, r53878, r53879, MPFR_RNDN);
        mpfr_div(r53881, r53877, r53880, MPFR_RNDN);
        mpfr_add(r53882, r53879, r53878, MPFR_RNDN);
        mpfr_set_d(r53883, b, MPFR_RNDN);
        mpfr_div(r53884, r53874, r53883, MPFR_RNDN);
        mpfr_mul(r53885, r53882, r53884, MPFR_RNDN);
        mpfr_add(r53886, r53885, r53869, MPFR_RNDN);
        mpfr_div(r53887, r53881, r53886, MPFR_RNDN);
        mpfr_mul(r53888, r53880, r53884, MPFR_RNDN);
        mpfr_mul(r53889, r53887, r53888, MPFR_RNDN);
        ;
        mpfr_set_si(r53891, mpfr_cmp(r53869, r53890) <= 0, MPFR_RNDN);
        mpfr_div(r53892, r53874, r53869, MPFR_RNDN);
        mpfr_div(r53893, r53873, r53892, MPFR_RNDN);
        mpfr_add(r53894, r53872, r53893, MPFR_RNDN);
        mpfr_add(r53895, r53878, r53879, MPFR_RNDN);
        mpfr_mul(r53896, r53869, r53883, MPFR_RNDN);
        mpfr_div(r53897, r53896, r53874, MPFR_RNDN);
        mpfr_add(r53898, r53895, r53897, MPFR_RNDN);
        mpfr_div(r53899, r53894, r53898, MPFR_RNDN);
        if (mpfr_get_si(r53891, MPFR_RNDN)) { mpfr_set(r53900, r53899, MPFR_RNDN); } else { mpfr_set(r53900, r53889, MPFR_RNDN); };
        if (mpfr_get_si(r53871, MPFR_RNDN)) { mpfr_set(r53901, r53889, MPFR_RNDN); } else { mpfr_set(r53901, r53900, MPFR_RNDN); };
        return mpfr_get_d(r53901, MPFR_RNDN);
}

