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

char *name = "Destination given bearing on a great circle";

double f_if(float lambda1, float phi1, float __attribute__((unused)) phi2, float delta, float theta) {
        float r25724 = lambda1;
        float r25725 = theta;
        float r25726 = sin(r25725);
        float r25727 = delta;
        float r25728 = sin(r25727);
        float r25729 = r25726 * r25728;
        float r25730 = phi1;
        float r25731 = cos(r25730);
        float r25732 = r25729 * r25731;
        float r25733 = cos(r25727);
        float r25734 = sin(r25730);
        float r25735 = r25734 * r25733;
        float r25736 = r25731 * r25728;
        float r25737 = cos(r25725);
        float r25738 = r25736 * r25737;
        float r25739 = r25735 + r25738;
        float r25740 = asin(r25739);
        float r25741 = sin(r25740);
        float r25742 = r25734 * r25741;
        float r25743 = r25733 - r25742;
        float r25744 = atan2(r25732, r25743);
        float r25745 = r25724 + r25744;
        return r25745;
}

double f_id(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r25746 = lambda1;
        double r25747 = theta;
        double r25748 = sin(r25747);
        double r25749 = delta;
        double r25750 = sin(r25749);
        double r25751 = r25748 * r25750;
        double r25752 = phi1;
        double r25753 = cos(r25752);
        double r25754 = r25751 * r25753;
        double r25755 = cos(r25749);
        double r25756 = sin(r25752);
        double r25757 = r25756 * r25755;
        double r25758 = r25753 * r25750;
        double r25759 = cos(r25747);
        double r25760 = r25758 * r25759;
        double r25761 = r25757 + r25760;
        double r25762 = asin(r25761);
        double r25763 = sin(r25762);
        double r25764 = r25756 * r25763;
        double r25765 = r25755 - r25764;
        double r25766 = atan2(r25754, r25765);
        double r25767 = r25746 + r25766;
        return r25767;
}


double f_of(float lambda1, float phi1, float __attribute__((unused)) phi2, float delta, float theta) {
        float r25768 = lambda1;
        float r25769 = theta;
        float r25770 = sin(r25769);
        float r25771 = delta;
        float r25772 = sin(r25771);
        float r25773 = r25770 * r25772;
        float r25774 = phi1;
        float r25775 = cos(r25774);
        float r25776 = r25773 * r25775;
        float r25777 = cos(r25771);
        float r25778 = sin(r25774);
        float r25779 = r25777 * r25778;
        float r25780 = cos(r25769);
        float r25781 = r25772 * r25775;
        float r25782 = r25780 * r25781;
        float r25783 = r25779 + r25782;
        float r25784 = asin(r25783);
        float r25785 = sin(r25784);
        float r25786 = 3;
        float r25787 = pow(r25778, r25786);
        float r25788 = r25785 * r25787;
        float r25789 = r25785 * r25785;
        float r25790 = r25788 * r25789;
        float r25791 = r25790 * r25790;
        float r25792 = cbrt(r25791);
        float r25793 = sqrt(r25792);
        float r25794 = r25777 + r25793;
        float r25795 = r25777 - r25793;
        float r25796 = r25794 * r25795;
        float r25797 = r25778 * r25777;
        float r25798 = r25775 * r25772;
        float r25799 = r25798 * r25780;
        float r25800 = r25797 + r25799;
        float r25801 = asin(r25800);
        float r25802 = sin(r25801);
        float r25803 = r25778 * r25802;
        float r25804 = r25777 + r25803;
        float r25805 = r25796 / r25804;
        float r25806 = atan2(r25776, r25805);
        float r25807 = r25768 + r25806;
        return r25807;
}

double f_od(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r25808 = lambda1;
        double r25809 = theta;
        double r25810 = sin(r25809);
        double r25811 = delta;
        double r25812 = sin(r25811);
        double r25813 = r25810 * r25812;
        double r25814 = phi1;
        double r25815 = cos(r25814);
        double r25816 = r25813 * r25815;
        double r25817 = cos(r25811);
        double r25818 = sin(r25814);
        double r25819 = r25817 * r25818;
        double r25820 = cos(r25809);
        double r25821 = r25812 * r25815;
        double r25822 = r25820 * r25821;
        double r25823 = r25819 + r25822;
        double r25824 = asin(r25823);
        double r25825 = sin(r25824);
        double r25826 = 3;
        double r25827 = pow(r25818, r25826);
        double r25828 = r25825 * r25827;
        double r25829 = r25825 * r25825;
        double r25830 = r25828 * r25829;
        double r25831 = r25830 * r25830;
        double r25832 = cbrt(r25831);
        double r25833 = sqrt(r25832);
        double r25834 = r25817 + r25833;
        double r25835 = r25817 - r25833;
        double r25836 = r25834 * r25835;
        double r25837 = r25818 * r25817;
        double r25838 = r25815 * r25812;
        double r25839 = r25838 * r25820;
        double r25840 = r25837 + r25839;
        double r25841 = asin(r25840);
        double r25842 = sin(r25841);
        double r25843 = r25818 * r25842;
        double r25844 = r25817 + r25843;
        double r25845 = r25836 / r25844;
        double r25846 = atan2(r25816, r25845);
        double r25847 = r25808 + r25846;
        return r25847;
}

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 r25848, r25849, r25850, r25851, r25852, r25853, r25854, r25855, r25856, r25857, r25858, r25859, r25860, r25861, r25862, r25863, r25864, r25865, r25866, r25867, r25868, r25869;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        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(r25860);
        mpfr_init(r25861);
        mpfr_init(r25862);
        mpfr_init(r25863);
        mpfr_init(r25864);
        mpfr_init(r25865);
        mpfr_init(r25866);
        mpfr_init(r25867);
        mpfr_init(r25868);
        mpfr_init(r25869);
}

double f_im(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        mpfr_set_d(r25848, lambda1, MPFR_RNDN);
        mpfr_set_d(r25849, theta, MPFR_RNDN);
        mpfr_sin(r25850, r25849, MPFR_RNDN);
        mpfr_set_d(r25851, delta, MPFR_RNDN);
        mpfr_sin(r25852, r25851, MPFR_RNDN);
        mpfr_mul(r25853, r25850, r25852, MPFR_RNDN);
        mpfr_set_d(r25854, phi1, MPFR_RNDN);
        mpfr_cos(r25855, r25854, MPFR_RNDN);
        mpfr_mul(r25856, r25853, r25855, MPFR_RNDN);
        mpfr_cos(r25857, r25851, MPFR_RNDN);
        mpfr_sin(r25858, r25854, MPFR_RNDN);
        mpfr_mul(r25859, r25858, r25857, MPFR_RNDN);
        mpfr_mul(r25860, r25855, r25852, MPFR_RNDN);
        mpfr_cos(r25861, r25849, MPFR_RNDN);
        mpfr_mul(r25862, r25860, r25861, MPFR_RNDN);
        mpfr_add(r25863, r25859, r25862, MPFR_RNDN);
        mpfr_asin(r25864, r25863, MPFR_RNDN);
        mpfr_sin(r25865, r25864, MPFR_RNDN);
        mpfr_mul(r25866, r25858, r25865, MPFR_RNDN);
        mpfr_sub(r25867, r25857, r25866, MPFR_RNDN);
        mpfr_atan2(r25868, r25856, r25867, MPFR_RNDN);
        mpfr_add(r25869, r25848, r25868, MPFR_RNDN);
        return mpfr_get_d(r25869, MPFR_RNDN);
}

static mpfr_t 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(592);
        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_set_str(r25888, "3", 10, MPFR_RNDN);
        mpfr_init(r25889);
        mpfr_init(r25890);
        mpfr_init(r25891);
        mpfr_init(r25892);
        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 lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        mpfr_set_d(r25870, lambda1, MPFR_RNDN);
        mpfr_set_d(r25871, theta, MPFR_RNDN);
        mpfr_sin(r25872, r25871, MPFR_RNDN);
        mpfr_set_d(r25873, delta, MPFR_RNDN);
        mpfr_sin(r25874, r25873, MPFR_RNDN);
        mpfr_mul(r25875, r25872, r25874, MPFR_RNDN);
        mpfr_set_d(r25876, phi1, MPFR_RNDN);
        mpfr_cos(r25877, r25876, MPFR_RNDN);
        mpfr_mul(r25878, r25875, r25877, MPFR_RNDN);
        mpfr_cos(r25879, r25873, MPFR_RNDN);
        mpfr_sin(r25880, r25876, MPFR_RNDN);
        mpfr_mul(r25881, r25879, r25880, MPFR_RNDN);
        mpfr_cos(r25882, r25871, MPFR_RNDN);
        mpfr_mul(r25883, r25874, r25877, MPFR_RNDN);
        mpfr_mul(r25884, r25882, r25883, MPFR_RNDN);
        mpfr_add(r25885, r25881, r25884, MPFR_RNDN);
        mpfr_asin(r25886, r25885, MPFR_RNDN);
        mpfr_sin(r25887, r25886, MPFR_RNDN);
        ;
        mpfr_pow(r25889, r25880, r25888, MPFR_RNDN);
        mpfr_mul(r25890, r25887, r25889, MPFR_RNDN);
        mpfr_mul(r25891, r25887, r25887, MPFR_RNDN);
        mpfr_mul(r25892, r25890, r25891, MPFR_RNDN);
        mpfr_mul(r25893, r25892, r25892, MPFR_RNDN);
        mpfr_cbrt(r25894, r25893, MPFR_RNDN);
        mpfr_sqrt(r25895, r25894, MPFR_RNDN);
        mpfr_add(r25896, r25879, r25895, MPFR_RNDN);
        mpfr_sub(r25897, r25879, r25895, MPFR_RNDN);
        mpfr_mul(r25898, r25896, r25897, MPFR_RNDN);
        mpfr_mul(r25899, r25880, r25879, MPFR_RNDN);
        mpfr_mul(r25900, r25877, r25874, MPFR_RNDN);
        mpfr_mul(r25901, r25900, r25882, MPFR_RNDN);
        mpfr_add(r25902, r25899, r25901, MPFR_RNDN);
        mpfr_asin(r25903, r25902, MPFR_RNDN);
        mpfr_sin(r25904, r25903, MPFR_RNDN);
        mpfr_mul(r25905, r25880, r25904, MPFR_RNDN);
        mpfr_add(r25906, r25879, r25905, MPFR_RNDN);
        mpfr_div(r25907, r25898, r25906, MPFR_RNDN);
        mpfr_atan2(r25908, r25878, r25907, MPFR_RNDN);
        mpfr_add(r25909, r25870, 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;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        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(r25920);
        mpfr_init(r25921);
        mpfr_init(r25922);
        mpfr_init(r25923);
        mpfr_init(r25924);
        mpfr_init(r25925);
        mpfr_init(r25926);
        mpfr_init(r25927);
        mpfr_init_set_str(r25928, "3", 10, MPFR_RNDN);
        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(r25943);
        mpfr_init(r25944);
        mpfr_init(r25945);
        mpfr_init(r25946);
        mpfr_init(r25947);
        mpfr_init(r25948);
        mpfr_init(r25949);
}

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

