#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 r7691 = phi1;
        float r7692 = sin(r7691);
        float r7693 = phi2;
        float r7694 = sin(r7693);
        float r7695 = r7692 * r7694;
        float r7696 = cos(r7691);
        float r7697 = cos(r7693);
        float r7698 = r7696 * r7697;
        float r7699 = lambda1;
        float r7700 = lambda2;
        float r7701 = r7699 - r7700;
        float r7702 = cos(r7701);
        float r7703 = r7698 * r7702;
        float r7704 = r7695 + r7703;
        float r7705 = acos(r7704);
        float r7706 = R;
        float r7707 = r7705 * r7706;
        return r7707;
}

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


double f_of(float R, float lambda1, float lambda2, float phi1, float phi2) {
        float r7725 = R;
        float r7726 = atan2(1.0, 0.0);
        float r7727 = 2.0f;
        float r7728 = r7726 / r7727;
        float r7729 = lambda2;
        float r7730 = sin(r7729);
        float r7731 = lambda1;
        float r7732 = sin(r7731);
        float r7733 = cos(r7731);
        float r7734 = cos(r7729);
        float r7735 = r7733 * r7734;
        float r7736 = fma(r7730, r7732, r7735);
        float r7737 = phi2;
        float r7738 = cos(r7737);
        float r7739 = phi1;
        float r7740 = cos(r7739);
        float r7741 = r7738 * r7740;
        float r7742 = sin(r7737);
        float r7743 = sin(r7739);
        float r7744 = r7742 * r7743;
        float r7745 = fma(r7736, r7741, r7744);
        float r7746 = asin(r7745);
        float r7747 = r7728 - r7746;
        float r7748 = r7725 * r7747;
        return r7748;
}

double f_od(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r7749 = R;
        double r7750 = atan2(1.0, 0.0);
        double r7751 = 2.0;
        double r7752 = r7750 / r7751;
        double r7753 = lambda2;
        double r7754 = sin(r7753);
        double r7755 = lambda1;
        double r7756 = sin(r7755);
        double r7757 = cos(r7755);
        double r7758 = cos(r7753);
        double r7759 = r7757 * r7758;
        double r7760 = fma(r7754, r7756, r7759);
        double r7761 = phi2;
        double r7762 = cos(r7761);
        double r7763 = phi1;
        double r7764 = cos(r7763);
        double r7765 = r7762 * r7764;
        double r7766 = sin(r7761);
        double r7767 = sin(r7763);
        double r7768 = r7766 * r7767;
        double r7769 = fma(r7760, r7765, r7768);
        double r7770 = asin(r7769);
        double r7771 = r7752 - r7770;
        double r7772 = r7749 * r7771;
        return r7772;
}

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 r7773, r7774, r7775, r7776, r7777, r7778, r7779, r7780, r7781, r7782, r7783, r7784, r7785, r7786, r7787, r7788, r7789;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1872);
        mpfr_init(r7773);
        mpfr_init(r7774);
        mpfr_init(r7775);
        mpfr_init(r7776);
        mpfr_init(r7777);
        mpfr_init(r7778);
        mpfr_init(r7779);
        mpfr_init(r7780);
        mpfr_init(r7781);
        mpfr_init(r7782);
        mpfr_init(r7783);
        mpfr_init(r7784);
        mpfr_init(r7785);
        mpfr_init(r7786);
        mpfr_init(r7787);
        mpfr_init(r7788);
        mpfr_init(r7789);
}

double f_im(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r7773, phi1, MPFR_RNDN);
        mpfr_sin(r7774, r7773, MPFR_RNDN);
        mpfr_set_d(r7775, phi2, MPFR_RNDN);
        mpfr_sin(r7776, r7775, MPFR_RNDN);
        mpfr_mul(r7777, r7774, r7776, MPFR_RNDN);
        mpfr_cos(r7778, r7773, MPFR_RNDN);
        mpfr_cos(r7779, r7775, MPFR_RNDN);
        mpfr_mul(r7780, r7778, r7779, MPFR_RNDN);
        mpfr_set_d(r7781, lambda1, MPFR_RNDN);
        mpfr_set_d(r7782, lambda2, MPFR_RNDN);
        mpfr_sub(r7783, r7781, r7782, MPFR_RNDN);
        mpfr_cos(r7784, r7783, MPFR_RNDN);
        mpfr_mul(r7785, r7780, r7784, MPFR_RNDN);
        mpfr_add(r7786, r7777, r7785, MPFR_RNDN);
        mpfr_acos(r7787, r7786, MPFR_RNDN);
        mpfr_set_d(r7788, R, MPFR_RNDN);
        mpfr_mul(r7789, r7787, r7788, MPFR_RNDN);
        return mpfr_get_d(r7789, MPFR_RNDN);
}

static mpfr_t r7790, r7791, r7792, r7793, r7794, r7795, r7796, r7797, r7798, r7799, r7800, r7801, r7802, r7803, r7804, r7805, r7806, r7807, r7808, r7809, r7810, r7811, r7812, r7813;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1872);
        mpfr_init(r7790);
        mpfr_init(r7791);
        mpfr_init_set_str(r7792, "2", 10, MPFR_RNDN);
        mpfr_init(r7793);
        mpfr_init(r7794);
        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);
        mpfr_init(r7812);
        mpfr_init(r7813);
}

double f_fm(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r7790, R, MPFR_RNDN);
        mpfr_const_pi(r7791, MPFR_RNDN);
        ;
        mpfr_div(r7793, r7791, r7792, MPFR_RNDN);
        mpfr_set_d(r7794, lambda2, MPFR_RNDN);
        mpfr_sin(r7795, r7794, MPFR_RNDN);
        mpfr_set_d(r7796, lambda1, MPFR_RNDN);
        mpfr_sin(r7797, r7796, MPFR_RNDN);
        mpfr_cos(r7798, r7796, MPFR_RNDN);
        mpfr_cos(r7799, r7794, MPFR_RNDN);
        mpfr_mul(r7800, r7798, r7799, MPFR_RNDN);
        mpfr_fma(r7801, r7795, r7797, r7800, MPFR_RNDN);
        mpfr_set_d(r7802, phi2, MPFR_RNDN);
        mpfr_cos(r7803, r7802, MPFR_RNDN);
        mpfr_set_d(r7804, phi1, MPFR_RNDN);
        mpfr_cos(r7805, r7804, MPFR_RNDN);
        mpfr_mul(r7806, r7803, r7805, MPFR_RNDN);
        mpfr_sin(r7807, r7802, MPFR_RNDN);
        mpfr_sin(r7808, r7804, MPFR_RNDN);
        mpfr_mul(r7809, r7807, r7808, MPFR_RNDN);
        mpfr_fma(r7810, r7801, r7806, r7809, MPFR_RNDN);
        mpfr_asin(r7811, r7810, MPFR_RNDN);
        mpfr_sub(r7812, r7793, r7811, MPFR_RNDN);
        mpfr_mul(r7813, r7790, r7812, MPFR_RNDN);
        return mpfr_get_d(r7813, MPFR_RNDN);
}

static mpfr_t 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_dm() {
        mpfr_set_default_prec(1872);
        mpfr_init(r7814);
        mpfr_init(r7815);
        mpfr_init_set_str(r7816, "2", 10, MPFR_RNDN);
        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_dm(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r7814, R, MPFR_RNDN);
        mpfr_const_pi(r7815, MPFR_RNDN);
        ;
        mpfr_div(r7817, r7815, r7816, MPFR_RNDN);
        mpfr_set_d(r7818, lambda2, MPFR_RNDN);
        mpfr_sin(r7819, r7818, MPFR_RNDN);
        mpfr_set_d(r7820, lambda1, MPFR_RNDN);
        mpfr_sin(r7821, r7820, MPFR_RNDN);
        mpfr_cos(r7822, r7820, MPFR_RNDN);
        mpfr_cos(r7823, r7818, MPFR_RNDN);
        mpfr_mul(r7824, r7822, r7823, MPFR_RNDN);
        mpfr_fma(r7825, r7819, r7821, r7824, MPFR_RNDN);
        mpfr_set_d(r7826, phi2, MPFR_RNDN);
        mpfr_cos(r7827, r7826, MPFR_RNDN);
        mpfr_set_d(r7828, phi1, MPFR_RNDN);
        mpfr_cos(r7829, r7828, MPFR_RNDN);
        mpfr_mul(r7830, r7827, r7829, MPFR_RNDN);
        mpfr_sin(r7831, r7826, MPFR_RNDN);
        mpfr_sin(r7832, r7828, MPFR_RNDN);
        mpfr_mul(r7833, r7831, r7832, MPFR_RNDN);
        mpfr_fma(r7834, r7825, r7830, r7833, MPFR_RNDN);
        mpfr_asin(r7835, r7834, MPFR_RNDN);
        mpfr_sub(r7836, r7817, r7835, MPFR_RNDN);
        mpfr_mul(r7837, r7814, r7836, MPFR_RNDN);
        return mpfr_get_d(r7837, MPFR_RNDN);
}

