#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 r25782 = R;
        float r25783 = 2;
        float r25784 = phi1;
        float r25785 = phi2;
        float r25786 = r25784 - r25785;
        float r25787 = r25786 / r25783;
        float r25788 = sin(r25787);
        float r25789 = pow(r25788, r25783);
        float r25790 = cos(r25784);
        float r25791 = cos(r25785);
        float r25792 = r25790 * r25791;
        float r25793 = lambda1;
        float r25794 = lambda2;
        float r25795 = r25793 - r25794;
        float r25796 = r25795 / r25783;
        float r25797 = sin(r25796);
        float r25798 = r25792 * r25797;
        float r25799 = r25798 * r25797;
        float r25800 = r25789 + r25799;
        float r25801 = sqrt(r25800);
        float r25802 = 1;
        float r25803 = r25802 - r25800;
        float r25804 = sqrt(r25803);
        float r25805 = atan2(r25801, r25804);
        float r25806 = r25783 * r25805;
        float r25807 = r25782 * r25806;
        return r25807;
}

double f_id(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r25808 = R;
        double r25809 = 2;
        double r25810 = phi1;
        double r25811 = phi2;
        double r25812 = r25810 - r25811;
        double r25813 = r25812 / r25809;
        double r25814 = sin(r25813);
        double r25815 = pow(r25814, r25809);
        double r25816 = cos(r25810);
        double r25817 = cos(r25811);
        double r25818 = r25816 * r25817;
        double r25819 = lambda1;
        double r25820 = lambda2;
        double r25821 = r25819 - r25820;
        double r25822 = r25821 / r25809;
        double r25823 = sin(r25822);
        double r25824 = r25818 * r25823;
        double r25825 = r25824 * r25823;
        double r25826 = r25815 + r25825;
        double r25827 = sqrt(r25826);
        double r25828 = 1;
        double r25829 = r25828 - r25826;
        double r25830 = sqrt(r25829);
        double r25831 = atan2(r25827, r25830);
        double r25832 = r25809 * r25831;
        double r25833 = r25808 * r25832;
        return r25833;
}


double f_of(float R, float lambda1, float lambda2, float phi1, float phi2) {
        float r25834 = R;
        float r25835 = 2;
        float r25836 = phi1;
        float r25837 = phi2;
        float r25838 = r25836 - r25837;
        float r25839 = r25838 / r25835;
        float r25840 = sin(r25839);
        float r25841 = pow(r25840, r25835);
        float r25842 = cos(r25836);
        float r25843 = cos(r25837);
        float r25844 = r25842 * r25843;
        float r25845 = lambda1;
        float r25846 = lambda2;
        float r25847 = r25845 - r25846;
        float r25848 = r25847 / r25835;
        float r25849 = sin(r25848);
        float r25850 = r25844 * r25849;
        float r25851 = 3;
        float r25852 = pow(r25849, r25851);
        float r25853 = cbrt(r25852);
        float r25854 = pow(r25853, r25851);
        float r25855 = cbrt(r25854);
        float r25856 = r25850 * r25855;
        float r25857 = r25841 + r25856;
        float r25858 = sqrt(r25857);
        float r25859 = 1;
        float r25860 = r25850 * r25849;
        float r25861 = r25841 + r25860;
        float r25862 = r25859 - r25861;
        float r25863 = sqrt(r25862);
        float r25864 = atan2(r25858, r25863);
        float r25865 = r25835 * r25864;
        float r25866 = r25834 * r25865;
        return r25866;
}

double f_od(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r25867 = R;
        double r25868 = 2;
        double r25869 = phi1;
        double r25870 = phi2;
        double r25871 = r25869 - r25870;
        double r25872 = r25871 / r25868;
        double r25873 = sin(r25872);
        double r25874 = pow(r25873, r25868);
        double r25875 = cos(r25869);
        double r25876 = cos(r25870);
        double r25877 = r25875 * r25876;
        double r25878 = lambda1;
        double r25879 = lambda2;
        double r25880 = r25878 - r25879;
        double r25881 = r25880 / r25868;
        double r25882 = sin(r25881);
        double r25883 = r25877 * r25882;
        double r25884 = 3;
        double r25885 = pow(r25882, r25884);
        double r25886 = cbrt(r25885);
        double r25887 = pow(r25886, r25884);
        double r25888 = cbrt(r25887);
        double r25889 = r25883 * r25888;
        double r25890 = r25874 + r25889;
        double r25891 = sqrt(r25890);
        double r25892 = 1;
        double r25893 = r25883 * r25882;
        double r25894 = r25874 + r25893;
        double r25895 = r25892 - r25894;
        double r25896 = sqrt(r25895);
        double r25897 = atan2(r25891, r25896);
        double r25898 = r25868 * r25897;
        double r25899 = r25867 * r25898;
        return r25899;
}

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 r25900, r25901, r25902, r25903, r25904, r25905, r25906, r25907, r25908, r25909, r25910, r25911, r25912, r25913, r25914, r25915, r25916, r25917, r25918, r25919, r25920, r25921, r25922, r25923, r25924, r25925;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r25900);
        mpfr_init_set_str(r25901, "2", 10, MPFR_RNDN);
        mpfr_init(r25902);
        mpfr_init(r25903);
        mpfr_init(r25904);
        mpfr_init(r25905);
        mpfr_init(r25906);
        mpfr_init(r25907);
        mpfr_init(r25908);
        mpfr_init(r25909);
        mpfr_init(r25910);
        mpfr_init(r25911);
        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_set_str(r25920, "1", 10, MPFR_RNDN);
        mpfr_init(r25921);
        mpfr_init(r25922);
        mpfr_init(r25923);
        mpfr_init(r25924);
        mpfr_init(r25925);
}

double f_im(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r25900, R, MPFR_RNDN);
        ;
        mpfr_set_d(r25902, phi1, MPFR_RNDN);
        mpfr_set_d(r25903, phi2, MPFR_RNDN);
        mpfr_sub(r25904, r25902, r25903, MPFR_RNDN);
        mpfr_div(r25905, r25904, r25901, MPFR_RNDN);
        mpfr_sin(r25906, r25905, MPFR_RNDN);
        mpfr_pow(r25907, r25906, r25901, MPFR_RNDN);
        mpfr_cos(r25908, r25902, MPFR_RNDN);
        mpfr_cos(r25909, r25903, MPFR_RNDN);
        mpfr_mul(r25910, r25908, r25909, MPFR_RNDN);
        mpfr_set_d(r25911, lambda1, MPFR_RNDN);
        mpfr_set_d(r25912, lambda2, MPFR_RNDN);
        mpfr_sub(r25913, r25911, r25912, MPFR_RNDN);
        mpfr_div(r25914, r25913, r25901, MPFR_RNDN);
        mpfr_sin(r25915, r25914, MPFR_RNDN);
        mpfr_mul(r25916, r25910, r25915, MPFR_RNDN);
        mpfr_mul(r25917, r25916, r25915, MPFR_RNDN);
        mpfr_add(r25918, r25907, r25917, MPFR_RNDN);
        mpfr_sqrt(r25919, r25918, MPFR_RNDN);
        ;
        mpfr_sub(r25921, r25920, r25918, MPFR_RNDN);
        mpfr_sqrt(r25922, r25921, MPFR_RNDN);
        mpfr_atan2(r25923, r25919, r25922, MPFR_RNDN);
        mpfr_mul(r25924, r25901, r25923, MPFR_RNDN);
        mpfr_mul(r25925, r25900, r25924, MPFR_RNDN);
        return mpfr_get_d(r25925, MPFR_RNDN);
}

static mpfr_t 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, r25954, r25955, r25956, r25957, r25958;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r25926);
        mpfr_init_set_str(r25927, "2", 10, MPFR_RNDN);
        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(r25936);
        mpfr_init(r25937);
        mpfr_init(r25938);
        mpfr_init(r25939);
        mpfr_init(r25940);
        mpfr_init(r25941);
        mpfr_init(r25942);
        mpfr_init_set_str(r25943, "3", 10, MPFR_RNDN);
        mpfr_init(r25944);
        mpfr_init(r25945);
        mpfr_init(r25946);
        mpfr_init(r25947);
        mpfr_init(r25948);
        mpfr_init(r25949);
        mpfr_init(r25950);
        mpfr_init_set_str(r25951, "1", 10, MPFR_RNDN);
        mpfr_init(r25952);
        mpfr_init(r25953);
        mpfr_init(r25954);
        mpfr_init(r25955);
        mpfr_init(r25956);
        mpfr_init(r25957);
        mpfr_init(r25958);
}

double f_fm(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r25926, R, MPFR_RNDN);
        ;
        mpfr_set_d(r25928, phi1, MPFR_RNDN);
        mpfr_set_d(r25929, phi2, MPFR_RNDN);
        mpfr_sub(r25930, r25928, r25929, MPFR_RNDN);
        mpfr_div(r25931, r25930, r25927, MPFR_RNDN);
        mpfr_sin(r25932, r25931, MPFR_RNDN);
        mpfr_pow(r25933, r25932, r25927, MPFR_RNDN);
        mpfr_cos(r25934, r25928, MPFR_RNDN);
        mpfr_cos(r25935, r25929, MPFR_RNDN);
        mpfr_mul(r25936, r25934, r25935, MPFR_RNDN);
        mpfr_set_d(r25937, lambda1, MPFR_RNDN);
        mpfr_set_d(r25938, lambda2, MPFR_RNDN);
        mpfr_sub(r25939, r25937, r25938, MPFR_RNDN);
        mpfr_div(r25940, r25939, r25927, MPFR_RNDN);
        mpfr_sin(r25941, r25940, MPFR_RNDN);
        mpfr_mul(r25942, r25936, r25941, MPFR_RNDN);
        ;
        mpfr_pow(r25944, r25941, r25943, MPFR_RNDN);
        mpfr_cbrt(r25945, r25944, MPFR_RNDN);
        mpfr_pow(r25946, r25945, r25943, MPFR_RNDN);
        mpfr_cbrt(r25947, r25946, MPFR_RNDN);
        mpfr_mul(r25948, r25942, r25947, MPFR_RNDN);
        mpfr_add(r25949, r25933, r25948, MPFR_RNDN);
        mpfr_sqrt(r25950, r25949, MPFR_RNDN);
        ;
        mpfr_mul(r25952, r25942, r25941, MPFR_RNDN);
        mpfr_add(r25953, r25933, r25952, MPFR_RNDN);
        mpfr_sub(r25954, r25951, r25953, MPFR_RNDN);
        mpfr_sqrt(r25955, r25954, MPFR_RNDN);
        mpfr_atan2(r25956, r25950, r25955, MPFR_RNDN);
        mpfr_mul(r25957, r25927, r25956, MPFR_RNDN);
        mpfr_mul(r25958, r25926, r25957, MPFR_RNDN);
        return mpfr_get_d(r25958, MPFR_RNDN);
}

static mpfr_t r25959, r25960, r25961, r25962, r25963, r25964, r25965, r25966, r25967, r25968, r25969, r25970, r25971, r25972, r25973, r25974, r25975, r25976, r25977, r25978, r25979, r25980, r25981, r25982, r25983, r25984, r25985, r25986, r25987, r25988, r25989, r25990, r25991;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r25959);
        mpfr_init_set_str(r25960, "2", 10, MPFR_RNDN);
        mpfr_init(r25961);
        mpfr_init(r25962);
        mpfr_init(r25963);
        mpfr_init(r25964);
        mpfr_init(r25965);
        mpfr_init(r25966);
        mpfr_init(r25967);
        mpfr_init(r25968);
        mpfr_init(r25969);
        mpfr_init(r25970);
        mpfr_init(r25971);
        mpfr_init(r25972);
        mpfr_init(r25973);
        mpfr_init(r25974);
        mpfr_init(r25975);
        mpfr_init_set_str(r25976, "3", 10, MPFR_RNDN);
        mpfr_init(r25977);
        mpfr_init(r25978);
        mpfr_init(r25979);
        mpfr_init(r25980);
        mpfr_init(r25981);
        mpfr_init(r25982);
        mpfr_init(r25983);
        mpfr_init_set_str(r25984, "1", 10, MPFR_RNDN);
        mpfr_init(r25985);
        mpfr_init(r25986);
        mpfr_init(r25987);
        mpfr_init(r25988);
        mpfr_init(r25989);
        mpfr_init(r25990);
        mpfr_init(r25991);
}

double f_dm(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r25959, R, MPFR_RNDN);
        ;
        mpfr_set_d(r25961, phi1, MPFR_RNDN);
        mpfr_set_d(r25962, phi2, MPFR_RNDN);
        mpfr_sub(r25963, r25961, r25962, MPFR_RNDN);
        mpfr_div(r25964, r25963, r25960, MPFR_RNDN);
        mpfr_sin(r25965, r25964, MPFR_RNDN);
        mpfr_pow(r25966, r25965, r25960, MPFR_RNDN);
        mpfr_cos(r25967, r25961, MPFR_RNDN);
        mpfr_cos(r25968, r25962, MPFR_RNDN);
        mpfr_mul(r25969, r25967, r25968, MPFR_RNDN);
        mpfr_set_d(r25970, lambda1, MPFR_RNDN);
        mpfr_set_d(r25971, lambda2, MPFR_RNDN);
        mpfr_sub(r25972, r25970, r25971, MPFR_RNDN);
        mpfr_div(r25973, r25972, r25960, MPFR_RNDN);
        mpfr_sin(r25974, r25973, MPFR_RNDN);
        mpfr_mul(r25975, r25969, r25974, MPFR_RNDN);
        ;
        mpfr_pow(r25977, r25974, r25976, MPFR_RNDN);
        mpfr_cbrt(r25978, r25977, MPFR_RNDN);
        mpfr_pow(r25979, r25978, r25976, MPFR_RNDN);
        mpfr_cbrt(r25980, r25979, MPFR_RNDN);
        mpfr_mul(r25981, r25975, r25980, MPFR_RNDN);
        mpfr_add(r25982, r25966, r25981, MPFR_RNDN);
        mpfr_sqrt(r25983, r25982, MPFR_RNDN);
        ;
        mpfr_mul(r25985, r25975, r25974, MPFR_RNDN);
        mpfr_add(r25986, r25966, r25985, MPFR_RNDN);
        mpfr_sub(r25987, r25984, r25986, MPFR_RNDN);
        mpfr_sqrt(r25988, r25987, MPFR_RNDN);
        mpfr_atan2(r25989, r25983, r25988, MPFR_RNDN);
        mpfr_mul(r25990, r25960, r25989, MPFR_RNDN);
        mpfr_mul(r25991, r25959, r25990, MPFR_RNDN);
        return mpfr_get_d(r25991, MPFR_RNDN);
}

