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

char *name = "Distance on a great circle";

double f_if(float R, float lambda1, float lambda2, float phi1, float phi2) {
        float r25700 = R;
        float r25701 = 2;
        float r25702 = phi1;
        float r25703 = phi2;
        float r25704 = r25702 - r25703;
        float r25705 = r25704 / r25701;
        float r25706 = sin(r25705);
        float r25707 = pow(r25706, r25701);
        float r25708 = cos(r25702);
        float r25709 = cos(r25703);
        float r25710 = r25708 * r25709;
        float r25711 = lambda1;
        float r25712 = lambda2;
        float r25713 = r25711 - r25712;
        float r25714 = r25713 / r25701;
        float r25715 = sin(r25714);
        float r25716 = r25710 * r25715;
        float r25717 = r25716 * r25715;
        float r25718 = r25707 + r25717;
        float r25719 = sqrt(r25718);
        float r25720 = 1;
        float r25721 = r25720 - r25718;
        float r25722 = sqrt(r25721);
        float r25723 = atan2(r25719, r25722);
        float r25724 = r25701 * r25723;
        float r25725 = r25700 * r25724;
        return r25725;
}

double f_id(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r25726 = R;
        double r25727 = 2;
        double r25728 = phi1;
        double r25729 = phi2;
        double r25730 = r25728 - r25729;
        double r25731 = r25730 / r25727;
        double r25732 = sin(r25731);
        double r25733 = pow(r25732, r25727);
        double r25734 = cos(r25728);
        double r25735 = cos(r25729);
        double r25736 = r25734 * r25735;
        double r25737 = lambda1;
        double r25738 = lambda2;
        double r25739 = r25737 - r25738;
        double r25740 = r25739 / r25727;
        double r25741 = sin(r25740);
        double r25742 = r25736 * r25741;
        double r25743 = r25742 * r25741;
        double r25744 = r25733 + r25743;
        double r25745 = sqrt(r25744);
        double r25746 = 1;
        double r25747 = r25746 - r25744;
        double r25748 = sqrt(r25747);
        double r25749 = atan2(r25745, r25748);
        double r25750 = r25727 * r25749;
        double r25751 = r25726 * r25750;
        return r25751;
}


double f_of(float R, float lambda1, float lambda2, float phi1, float phi2) {
        float r25752 = R;
        float r25753 = 2;
        float r25754 = phi1;
        float r25755 = r25754 / r25753;
        float r25756 = sin(r25755);
        float r25757 = phi2;
        float r25758 = r25757 / r25753;
        float r25759 = cos(r25758);
        float r25760 = r25756 * r25759;
        float r25761 = cos(r25755);
        float r25762 = sin(r25758);
        float r25763 = r25761 * r25762;
        float r25764 = r25760 - r25763;
        float r25765 = pow(r25764, r25753);
        float r25766 = cos(r25754);
        float r25767 = cos(r25757);
        float r25768 = r25766 * r25767;
        float r25769 = lambda1;
        float r25770 = lambda2;
        float r25771 = r25769 - r25770;
        float r25772 = r25771 / r25753;
        float r25773 = sin(r25772);
        float r25774 = r25768 * r25773;
        float r25775 = r25774 * r25773;
        float r25776 = r25765 + r25775;
        float r25777 = sqrt(r25776);
        float r25778 = 1;
        float r25779 = r25769 / r25753;
        float r25780 = sin(r25779);
        float r25781 = r25770 / r25753;
        float r25782 = cos(r25781);
        float r25783 = r25780 * r25782;
        float r25784 = cos(r25779);
        float r25785 = sin(r25781);
        float r25786 = r25784 * r25785;
        float r25787 = r25783 - r25786;
        float r25788 = r25768 * r25787;
        float r25789 = r25788 * r25787;
        float r25790 = r25765 + r25789;
        float r25791 = r25778 - r25790;
        float r25792 = sqrt(r25791);
        float r25793 = atan2(r25777, r25792);
        float r25794 = r25753 * r25793;
        float r25795 = r25752 * r25794;
        return r25795;
}

double f_od(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r25796 = R;
        double r25797 = 2;
        double r25798 = phi1;
        double r25799 = r25798 / r25797;
        double r25800 = sin(r25799);
        double r25801 = phi2;
        double r25802 = r25801 / r25797;
        double r25803 = cos(r25802);
        double r25804 = r25800 * r25803;
        double r25805 = cos(r25799);
        double r25806 = sin(r25802);
        double r25807 = r25805 * r25806;
        double r25808 = r25804 - r25807;
        double r25809 = pow(r25808, r25797);
        double r25810 = cos(r25798);
        double r25811 = cos(r25801);
        double r25812 = r25810 * r25811;
        double r25813 = lambda1;
        double r25814 = lambda2;
        double r25815 = r25813 - r25814;
        double r25816 = r25815 / r25797;
        double r25817 = sin(r25816);
        double r25818 = r25812 * r25817;
        double r25819 = r25818 * r25817;
        double r25820 = r25809 + r25819;
        double r25821 = sqrt(r25820);
        double r25822 = 1;
        double r25823 = r25813 / r25797;
        double r25824 = sin(r25823);
        double r25825 = r25814 / r25797;
        double r25826 = cos(r25825);
        double r25827 = r25824 * r25826;
        double r25828 = cos(r25823);
        double r25829 = sin(r25825);
        double r25830 = r25828 * r25829;
        double r25831 = r25827 - r25830;
        double r25832 = r25812 * r25831;
        double r25833 = r25832 * r25831;
        double r25834 = r25809 + r25833;
        double r25835 = r25822 - r25834;
        double r25836 = sqrt(r25835);
        double r25837 = atan2(r25821, r25836);
        double r25838 = r25797 * r25837;
        double r25839 = r25796 * r25838;
        return r25839;
}

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 r25840, r25841, r25842, r25843, r25844, r25845, r25846, r25847, r25848, r25849, r25850, r25851, r25852, r25853, r25854, r25855, r25856, r25857, r25858, r25859, r25860, r25861, r25862, r25863, r25864, r25865;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r25840);
        mpfr_init_set_str(r25841, "2", 10, MPFR_RNDN);
        mpfr_init(r25842);
        mpfr_init(r25843);
        mpfr_init(r25844);
        mpfr_init(r25845);
        mpfr_init(r25846);
        mpfr_init(r25847);
        mpfr_init(r25848);
        mpfr_init(r25849);
        mpfr_init(r25850);
        mpfr_init(r25851);
        mpfr_init(r25852);
        mpfr_init(r25853);
        mpfr_init(r25854);
        mpfr_init(r25855);
        mpfr_init(r25856);
        mpfr_init(r25857);
        mpfr_init(r25858);
        mpfr_init(r25859);
        mpfr_init_set_str(r25860, "1", 10, MPFR_RNDN);
        mpfr_init(r25861);
        mpfr_init(r25862);
        mpfr_init(r25863);
        mpfr_init(r25864);
        mpfr_init(r25865);
}

double f_im(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r25840, R, MPFR_RNDN);
        ;
        mpfr_set_d(r25842, phi1, MPFR_RNDN);
        mpfr_set_d(r25843, phi2, MPFR_RNDN);
        mpfr_sub(r25844, r25842, r25843, MPFR_RNDN);
        mpfr_div(r25845, r25844, r25841, MPFR_RNDN);
        mpfr_sin(r25846, r25845, MPFR_RNDN);
        mpfr_pow(r25847, r25846, r25841, MPFR_RNDN);
        mpfr_cos(r25848, r25842, MPFR_RNDN);
        mpfr_cos(r25849, r25843, MPFR_RNDN);
        mpfr_mul(r25850, r25848, r25849, MPFR_RNDN);
        mpfr_set_d(r25851, lambda1, MPFR_RNDN);
        mpfr_set_d(r25852, lambda2, MPFR_RNDN);
        mpfr_sub(r25853, r25851, r25852, MPFR_RNDN);
        mpfr_div(r25854, r25853, r25841, MPFR_RNDN);
        mpfr_sin(r25855, r25854, MPFR_RNDN);
        mpfr_mul(r25856, r25850, r25855, MPFR_RNDN);
        mpfr_mul(r25857, r25856, r25855, MPFR_RNDN);
        mpfr_add(r25858, r25847, r25857, MPFR_RNDN);
        mpfr_sqrt(r25859, r25858, MPFR_RNDN);
        ;
        mpfr_sub(r25861, r25860, r25858, MPFR_RNDN);
        mpfr_sqrt(r25862, r25861, MPFR_RNDN);
        mpfr_atan2(r25863, r25859, r25862, MPFR_RNDN);
        mpfr_mul(r25864, r25841, r25863, MPFR_RNDN);
        mpfr_mul(r25865, r25840, r25864, MPFR_RNDN);
        return mpfr_get_d(r25865, MPFR_RNDN);
}

static mpfr_t r25866, r25867, r25868, r25869, r25870, r25871, r25872, r25873, r25874, r25875, r25876, r25877, r25878, r25879, r25880, r25881, r25882, r25883, r25884, r25885, r25886, r25887, r25888, r25889, r25890, r25891, r25892, r25893, r25894, r25895, r25896, r25897, r25898, r25899, r25900, r25901, r25902, r25903, r25904, r25905, r25906, r25907, r25908, r25909;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r25866);
        mpfr_init_set_str(r25867, "2", 10, MPFR_RNDN);
        mpfr_init(r25868);
        mpfr_init(r25869);
        mpfr_init(r25870);
        mpfr_init(r25871);
        mpfr_init(r25872);
        mpfr_init(r25873);
        mpfr_init(r25874);
        mpfr_init(r25875);
        mpfr_init(r25876);
        mpfr_init(r25877);
        mpfr_init(r25878);
        mpfr_init(r25879);
        mpfr_init(r25880);
        mpfr_init(r25881);
        mpfr_init(r25882);
        mpfr_init(r25883);
        mpfr_init(r25884);
        mpfr_init(r25885);
        mpfr_init(r25886);
        mpfr_init(r25887);
        mpfr_init(r25888);
        mpfr_init(r25889);
        mpfr_init(r25890);
        mpfr_init(r25891);
        mpfr_init_set_str(r25892, "1", 10, MPFR_RNDN);
        mpfr_init(r25893);
        mpfr_init(r25894);
        mpfr_init(r25895);
        mpfr_init(r25896);
        mpfr_init(r25897);
        mpfr_init(r25898);
        mpfr_init(r25899);
        mpfr_init(r25900);
        mpfr_init(r25901);
        mpfr_init(r25902);
        mpfr_init(r25903);
        mpfr_init(r25904);
        mpfr_init(r25905);
        mpfr_init(r25906);
        mpfr_init(r25907);
        mpfr_init(r25908);
        mpfr_init(r25909);
}

double f_fm(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r25866, R, MPFR_RNDN);
        ;
        mpfr_set_d(r25868, phi1, MPFR_RNDN);
        mpfr_div(r25869, r25868, r25867, MPFR_RNDN);
        mpfr_sin(r25870, r25869, MPFR_RNDN);
        mpfr_set_d(r25871, phi2, MPFR_RNDN);
        mpfr_div(r25872, r25871, r25867, MPFR_RNDN);
        mpfr_cos(r25873, r25872, MPFR_RNDN);
        mpfr_mul(r25874, r25870, r25873, MPFR_RNDN);
        mpfr_cos(r25875, r25869, MPFR_RNDN);
        mpfr_sin(r25876, r25872, MPFR_RNDN);
        mpfr_mul(r25877, r25875, r25876, MPFR_RNDN);
        mpfr_sub(r25878, r25874, r25877, MPFR_RNDN);
        mpfr_pow(r25879, r25878, r25867, MPFR_RNDN);
        mpfr_cos(r25880, r25868, MPFR_RNDN);
        mpfr_cos(r25881, r25871, MPFR_RNDN);
        mpfr_mul(r25882, r25880, r25881, MPFR_RNDN);
        mpfr_set_d(r25883, lambda1, MPFR_RNDN);
        mpfr_set_d(r25884, lambda2, MPFR_RNDN);
        mpfr_sub(r25885, r25883, r25884, MPFR_RNDN);
        mpfr_div(r25886, r25885, r25867, MPFR_RNDN);
        mpfr_sin(r25887, r25886, MPFR_RNDN);
        mpfr_mul(r25888, r25882, r25887, MPFR_RNDN);
        mpfr_mul(r25889, r25888, r25887, MPFR_RNDN);
        mpfr_add(r25890, r25879, r25889, MPFR_RNDN);
        mpfr_sqrt(r25891, r25890, MPFR_RNDN);
        ;
        mpfr_div(r25893, r25883, r25867, MPFR_RNDN);
        mpfr_sin(r25894, r25893, MPFR_RNDN);
        mpfr_div(r25895, r25884, r25867, MPFR_RNDN);
        mpfr_cos(r25896, r25895, MPFR_RNDN);
        mpfr_mul(r25897, r25894, r25896, MPFR_RNDN);
        mpfr_cos(r25898, r25893, MPFR_RNDN);
        mpfr_sin(r25899, r25895, MPFR_RNDN);
        mpfr_mul(r25900, r25898, r25899, MPFR_RNDN);
        mpfr_sub(r25901, r25897, r25900, MPFR_RNDN);
        mpfr_mul(r25902, r25882, r25901, MPFR_RNDN);
        mpfr_mul(r25903, r25902, r25901, MPFR_RNDN);
        mpfr_add(r25904, r25879, r25903, MPFR_RNDN);
        mpfr_sub(r25905, r25892, r25904, MPFR_RNDN);
        mpfr_sqrt(r25906, r25905, MPFR_RNDN);
        mpfr_atan2(r25907, r25891, r25906, MPFR_RNDN);
        mpfr_mul(r25908, r25867, r25907, MPFR_RNDN);
        mpfr_mul(r25909, r25866, r25908, MPFR_RNDN);
        return mpfr_get_d(r25909, MPFR_RNDN);
}

static mpfr_t r25910, r25911, r25912, r25913, r25914, r25915, r25916, r25917, r25918, r25919, r25920, r25921, r25922, r25923, r25924, r25925, r25926, r25927, r25928, r25929, r25930, r25931, r25932, r25933, r25934, r25935, r25936, r25937, r25938, r25939, r25940, r25941, r25942, r25943, r25944, r25945, r25946, r25947, r25948, r25949, r25950, r25951, r25952, r25953;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r25910);
        mpfr_init_set_str(r25911, "2", 10, MPFR_RNDN);
        mpfr_init(r25912);
        mpfr_init(r25913);
        mpfr_init(r25914);
        mpfr_init(r25915);
        mpfr_init(r25916);
        mpfr_init(r25917);
        mpfr_init(r25918);
        mpfr_init(r25919);
        mpfr_init(r25920);
        mpfr_init(r25921);
        mpfr_init(r25922);
        mpfr_init(r25923);
        mpfr_init(r25924);
        mpfr_init(r25925);
        mpfr_init(r25926);
        mpfr_init(r25927);
        mpfr_init(r25928);
        mpfr_init(r25929);
        mpfr_init(r25930);
        mpfr_init(r25931);
        mpfr_init(r25932);
        mpfr_init(r25933);
        mpfr_init(r25934);
        mpfr_init(r25935);
        mpfr_init_set_str(r25936, "1", 10, MPFR_RNDN);
        mpfr_init(r25937);
        mpfr_init(r25938);
        mpfr_init(r25939);
        mpfr_init(r25940);
        mpfr_init(r25941);
        mpfr_init(r25942);
        mpfr_init(r25943);
        mpfr_init(r25944);
        mpfr_init(r25945);
        mpfr_init(r25946);
        mpfr_init(r25947);
        mpfr_init(r25948);
        mpfr_init(r25949);
        mpfr_init(r25950);
        mpfr_init(r25951);
        mpfr_init(r25952);
        mpfr_init(r25953);
}

double f_dm(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r25910, R, MPFR_RNDN);
        ;
        mpfr_set_d(r25912, phi1, MPFR_RNDN);
        mpfr_div(r25913, r25912, r25911, MPFR_RNDN);
        mpfr_sin(r25914, r25913, MPFR_RNDN);
        mpfr_set_d(r25915, phi2, MPFR_RNDN);
        mpfr_div(r25916, r25915, r25911, MPFR_RNDN);
        mpfr_cos(r25917, r25916, MPFR_RNDN);
        mpfr_mul(r25918, r25914, r25917, MPFR_RNDN);
        mpfr_cos(r25919, r25913, MPFR_RNDN);
        mpfr_sin(r25920, r25916, MPFR_RNDN);
        mpfr_mul(r25921, r25919, r25920, MPFR_RNDN);
        mpfr_sub(r25922, r25918, r25921, MPFR_RNDN);
        mpfr_pow(r25923, r25922, r25911, MPFR_RNDN);
        mpfr_cos(r25924, r25912, MPFR_RNDN);
        mpfr_cos(r25925, r25915, MPFR_RNDN);
        mpfr_mul(r25926, r25924, r25925, MPFR_RNDN);
        mpfr_set_d(r25927, lambda1, MPFR_RNDN);
        mpfr_set_d(r25928, lambda2, MPFR_RNDN);
        mpfr_sub(r25929, r25927, r25928, MPFR_RNDN);
        mpfr_div(r25930, r25929, r25911, MPFR_RNDN);
        mpfr_sin(r25931, r25930, MPFR_RNDN);
        mpfr_mul(r25932, r25926, r25931, MPFR_RNDN);
        mpfr_mul(r25933, r25932, r25931, MPFR_RNDN);
        mpfr_add(r25934, r25923, r25933, MPFR_RNDN);
        mpfr_sqrt(r25935, r25934, MPFR_RNDN);
        ;
        mpfr_div(r25937, r25927, r25911, MPFR_RNDN);
        mpfr_sin(r25938, r25937, MPFR_RNDN);
        mpfr_div(r25939, r25928, r25911, MPFR_RNDN);
        mpfr_cos(r25940, r25939, MPFR_RNDN);
        mpfr_mul(r25941, r25938, r25940, MPFR_RNDN);
        mpfr_cos(r25942, r25937, MPFR_RNDN);
        mpfr_sin(r25943, r25939, MPFR_RNDN);
        mpfr_mul(r25944, r25942, r25943, MPFR_RNDN);
        mpfr_sub(r25945, r25941, r25944, MPFR_RNDN);
        mpfr_mul(r25946, r25926, r25945, MPFR_RNDN);
        mpfr_mul(r25947, r25946, r25945, MPFR_RNDN);
        mpfr_add(r25948, r25923, r25947, MPFR_RNDN);
        mpfr_sub(r25949, r25936, r25948, MPFR_RNDN);
        mpfr_sqrt(r25950, r25949, MPFR_RNDN);
        mpfr_atan2(r25951, r25935, r25950, MPFR_RNDN);
        mpfr_mul(r25952, r25911, r25951, MPFR_RNDN);
        mpfr_mul(r25953, r25910, r25952, MPFR_RNDN);
        return mpfr_get_d(r25953, MPFR_RNDN);
}

