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

char *name = "Spherical law of cosines";

double f_if(float R, float lambda1, float lambda2, float phi1, float phi2) {
        float r7709 = phi1;
        float r7710 = sin(r7709);
        float r7711 = phi2;
        float r7712 = sin(r7711);
        float r7713 = r7710 * r7712;
        float r7714 = cos(r7709);
        float r7715 = cos(r7711);
        float r7716 = r7714 * r7715;
        float r7717 = lambda1;
        float r7718 = lambda2;
        float r7719 = r7717 - r7718;
        float r7720 = cos(r7719);
        float r7721 = r7716 * r7720;
        float r7722 = r7713 + r7721;
        float r7723 = acos(r7722);
        float r7724 = R;
        float r7725 = r7723 * r7724;
        return r7725;
}

double f_id(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r7726 = phi1;
        double r7727 = sin(r7726);
        double r7728 = phi2;
        double r7729 = sin(r7728);
        double r7730 = r7727 * r7729;
        double r7731 = cos(r7726);
        double r7732 = cos(r7728);
        double r7733 = r7731 * r7732;
        double r7734 = lambda1;
        double r7735 = lambda2;
        double r7736 = r7734 - r7735;
        double r7737 = cos(r7736);
        double r7738 = r7733 * r7737;
        double r7739 = r7730 + r7738;
        double r7740 = acos(r7739);
        double r7741 = R;
        double r7742 = r7740 * r7741;
        return r7742;
}


double f_of(float R, float lambda1, float lambda2, float phi1, float phi2) {
        float r7743 = R;
        float r7744 = phi1;
        float r7745 = cos(r7744);
        float r7746 = phi2;
        float r7747 = cos(r7746);
        float r7748 = lambda2;
        float r7749 = cos(r7748);
        float r7750 = lambda1;
        float r7751 = cos(r7750);
        float r7752 = r7749 * r7751;
        float r7753 = r7747 * r7752;
        float r7754 = r7745 * r7753;
        float r7755 = sin(r7750);
        float r7756 = sin(r7748);
        float r7757 = r7755 * r7756;
        float r7758 = r7757 * r7747;
        float r7759 = r7758 * r7745;
        float r7760 = r7754 + r7759;
        float r7761 = sin(r7746);
        float r7762 = sin(r7744);
        float r7763 = r7761 * r7762;
        float r7764 = r7760 + r7763;
        float r7765 = acos(r7764);
        float r7766 = exp(r7765);
        float r7767 = log(r7766);
        float r7768 = r7743 * r7767;
        return r7768;
}

double f_od(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r7769 = R;
        double r7770 = phi1;
        double r7771 = cos(r7770);
        double r7772 = phi2;
        double r7773 = cos(r7772);
        double r7774 = lambda2;
        double r7775 = cos(r7774);
        double r7776 = lambda1;
        double r7777 = cos(r7776);
        double r7778 = r7775 * r7777;
        double r7779 = r7773 * r7778;
        double r7780 = r7771 * r7779;
        double r7781 = sin(r7776);
        double r7782 = sin(r7774);
        double r7783 = r7781 * r7782;
        double r7784 = r7783 * r7773;
        double r7785 = r7784 * r7771;
        double r7786 = r7780 + r7785;
        double r7787 = sin(r7772);
        double r7788 = sin(r7770);
        double r7789 = r7787 * r7788;
        double r7790 = r7786 + r7789;
        double r7791 = acos(r7790);
        double r7792 = exp(r7791);
        double r7793 = log(r7792);
        double r7794 = r7769 * r7793;
        return r7794;
}

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 r7795, r7796, r7797, r7798, r7799, r7800, r7801, r7802, r7803, r7804, r7805, r7806, r7807, r7808, r7809, r7810, r7811;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2128);
        mpfr_init(r7795);
        mpfr_init(r7796);
        mpfr_init(r7797);
        mpfr_init(r7798);
        mpfr_init(r7799);
        mpfr_init(r7800);
        mpfr_init(r7801);
        mpfr_init(r7802);
        mpfr_init(r7803);
        mpfr_init(r7804);
        mpfr_init(r7805);
        mpfr_init(r7806);
        mpfr_init(r7807);
        mpfr_init(r7808);
        mpfr_init(r7809);
        mpfr_init(r7810);
        mpfr_init(r7811);
}

double f_im(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r7795, phi1, MPFR_RNDN);
        mpfr_sin(r7796, r7795, MPFR_RNDN);
        mpfr_set_d(r7797, phi2, MPFR_RNDN);
        mpfr_sin(r7798, r7797, MPFR_RNDN);
        mpfr_mul(r7799, r7796, r7798, MPFR_RNDN);
        mpfr_cos(r7800, r7795, MPFR_RNDN);
        mpfr_cos(r7801, r7797, MPFR_RNDN);
        mpfr_mul(r7802, r7800, r7801, MPFR_RNDN);
        mpfr_set_d(r7803, lambda1, MPFR_RNDN);
        mpfr_set_d(r7804, lambda2, MPFR_RNDN);
        mpfr_sub(r7805, r7803, r7804, MPFR_RNDN);
        mpfr_cos(r7806, r7805, MPFR_RNDN);
        mpfr_mul(r7807, r7802, r7806, MPFR_RNDN);
        mpfr_add(r7808, r7799, r7807, MPFR_RNDN);
        mpfr_acos(r7809, r7808, MPFR_RNDN);
        mpfr_set_d(r7810, R, MPFR_RNDN);
        mpfr_mul(r7811, r7809, r7810, MPFR_RNDN);
        return mpfr_get_d(r7811, MPFR_RNDN);
}

static mpfr_t r7812, r7813, r7814, r7815, r7816, r7817, r7818, r7819, r7820, r7821, r7822, r7823, r7824, r7825, r7826, r7827, r7828, r7829, r7830, r7831, r7832, r7833, r7834, r7835, r7836, r7837;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2128);
        mpfr_init(r7812);
        mpfr_init(r7813);
        mpfr_init(r7814);
        mpfr_init(r7815);
        mpfr_init(r7816);
        mpfr_init(r7817);
        mpfr_init(r7818);
        mpfr_init(r7819);
        mpfr_init(r7820);
        mpfr_init(r7821);
        mpfr_init(r7822);
        mpfr_init(r7823);
        mpfr_init(r7824);
        mpfr_init(r7825);
        mpfr_init(r7826);
        mpfr_init(r7827);
        mpfr_init(r7828);
        mpfr_init(r7829);
        mpfr_init(r7830);
        mpfr_init(r7831);
        mpfr_init(r7832);
        mpfr_init(r7833);
        mpfr_init(r7834);
        mpfr_init(r7835);
        mpfr_init(r7836);
        mpfr_init(r7837);
}

double f_fm(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r7812, R, MPFR_RNDN);
        mpfr_set_d(r7813, phi1, MPFR_RNDN);
        mpfr_cos(r7814, r7813, MPFR_RNDN);
        mpfr_set_d(r7815, phi2, MPFR_RNDN);
        mpfr_cos(r7816, r7815, MPFR_RNDN);
        mpfr_set_d(r7817, lambda2, MPFR_RNDN);
        mpfr_cos(r7818, r7817, MPFR_RNDN);
        mpfr_set_d(r7819, lambda1, MPFR_RNDN);
        mpfr_cos(r7820, r7819, MPFR_RNDN);
        mpfr_mul(r7821, r7818, r7820, MPFR_RNDN);
        mpfr_mul(r7822, r7816, r7821, MPFR_RNDN);
        mpfr_mul(r7823, r7814, r7822, MPFR_RNDN);
        mpfr_sin(r7824, r7819, MPFR_RNDN);
        mpfr_sin(r7825, r7817, MPFR_RNDN);
        mpfr_mul(r7826, r7824, r7825, MPFR_RNDN);
        mpfr_mul(r7827, r7826, r7816, MPFR_RNDN);
        mpfr_mul(r7828, r7827, r7814, MPFR_RNDN);
        mpfr_add(r7829, r7823, r7828, MPFR_RNDN);
        mpfr_sin(r7830, r7815, MPFR_RNDN);
        mpfr_sin(r7831, r7813, MPFR_RNDN);
        mpfr_mul(r7832, r7830, r7831, MPFR_RNDN);
        mpfr_add(r7833, r7829, r7832, MPFR_RNDN);
        mpfr_acos(r7834, r7833, MPFR_RNDN);
        mpfr_exp(r7835, r7834, MPFR_RNDN);
        mpfr_log(r7836, r7835, MPFR_RNDN);
        mpfr_mul(r7837, r7812, r7836, MPFR_RNDN);
        return mpfr_get_d(r7837, MPFR_RNDN);
}

static mpfr_t r7838, r7839, r7840, r7841, r7842, r7843, r7844, r7845, r7846, r7847, r7848, r7849, r7850, r7851, r7852, r7853, r7854, r7855, r7856, r7857, r7858, r7859, r7860, r7861, r7862, r7863;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2128);
        mpfr_init(r7838);
        mpfr_init(r7839);
        mpfr_init(r7840);
        mpfr_init(r7841);
        mpfr_init(r7842);
        mpfr_init(r7843);
        mpfr_init(r7844);
        mpfr_init(r7845);
        mpfr_init(r7846);
        mpfr_init(r7847);
        mpfr_init(r7848);
        mpfr_init(r7849);
        mpfr_init(r7850);
        mpfr_init(r7851);
        mpfr_init(r7852);
        mpfr_init(r7853);
        mpfr_init(r7854);
        mpfr_init(r7855);
        mpfr_init(r7856);
        mpfr_init(r7857);
        mpfr_init(r7858);
        mpfr_init(r7859);
        mpfr_init(r7860);
        mpfr_init(r7861);
        mpfr_init(r7862);
        mpfr_init(r7863);
}

double f_dm(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r7838, R, MPFR_RNDN);
        mpfr_set_d(r7839, phi1, MPFR_RNDN);
        mpfr_cos(r7840, r7839, MPFR_RNDN);
        mpfr_set_d(r7841, phi2, MPFR_RNDN);
        mpfr_cos(r7842, r7841, MPFR_RNDN);
        mpfr_set_d(r7843, lambda2, MPFR_RNDN);
        mpfr_cos(r7844, r7843, MPFR_RNDN);
        mpfr_set_d(r7845, lambda1, MPFR_RNDN);
        mpfr_cos(r7846, r7845, MPFR_RNDN);
        mpfr_mul(r7847, r7844, r7846, MPFR_RNDN);
        mpfr_mul(r7848, r7842, r7847, MPFR_RNDN);
        mpfr_mul(r7849, r7840, r7848, MPFR_RNDN);
        mpfr_sin(r7850, r7845, MPFR_RNDN);
        mpfr_sin(r7851, r7843, MPFR_RNDN);
        mpfr_mul(r7852, r7850, r7851, MPFR_RNDN);
        mpfr_mul(r7853, r7852, r7842, MPFR_RNDN);
        mpfr_mul(r7854, r7853, r7840, MPFR_RNDN);
        mpfr_add(r7855, r7849, r7854, MPFR_RNDN);
        mpfr_sin(r7856, r7841, MPFR_RNDN);
        mpfr_sin(r7857, r7839, MPFR_RNDN);
        mpfr_mul(r7858, r7856, r7857, MPFR_RNDN);
        mpfr_add(r7859, r7855, r7858, MPFR_RNDN);
        mpfr_acos(r7860, r7859, MPFR_RNDN);
        mpfr_exp(r7861, r7860, MPFR_RNDN);
        mpfr_log(r7862, r7861, MPFR_RNDN);
        mpfr_mul(r7863, r7838, r7862, MPFR_RNDN);
        return mpfr_get_d(r7863, MPFR_RNDN);
}

