#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 r25762 = lambda1;
        float r25763 = theta;
        float r25764 = sin(r25763);
        float r25765 = delta;
        float r25766 = sin(r25765);
        float r25767 = r25764 * r25766;
        float r25768 = phi1;
        float r25769 = cos(r25768);
        float r25770 = r25767 * r25769;
        float r25771 = cos(r25765);
        float r25772 = sin(r25768);
        float r25773 = r25772 * r25771;
        float r25774 = r25769 * r25766;
        float r25775 = cos(r25763);
        float r25776 = r25774 * r25775;
        float r25777 = r25773 + r25776;
        float r25778 = asin(r25777);
        float r25779 = sin(r25778);
        float r25780 = r25772 * r25779;
        float r25781 = r25771 - r25780;
        float r25782 = atan2(r25770, r25781);
        float r25783 = r25762 + r25782;
        return r25783;
}

double f_id(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r25784 = lambda1;
        double r25785 = theta;
        double r25786 = sin(r25785);
        double r25787 = delta;
        double r25788 = sin(r25787);
        double r25789 = r25786 * r25788;
        double r25790 = phi1;
        double r25791 = cos(r25790);
        double r25792 = r25789 * r25791;
        double r25793 = cos(r25787);
        double r25794 = sin(r25790);
        double r25795 = r25794 * r25793;
        double r25796 = r25791 * r25788;
        double r25797 = cos(r25785);
        double r25798 = r25796 * r25797;
        double r25799 = r25795 + r25798;
        double r25800 = asin(r25799);
        double r25801 = sin(r25800);
        double r25802 = r25794 * r25801;
        double r25803 = r25793 - r25802;
        double r25804 = atan2(r25792, r25803);
        double r25805 = r25784 + r25804;
        return r25805;
}


double f_of(float lambda1, float phi1, float __attribute__((unused)) phi2, float delta, float theta) {
        float r25806 = delta;
        float r25807 = sin(r25806);
        float r25808 = phi1;
        float r25809 = cos(r25808);
        float r25810 = theta;
        float r25811 = sin(r25810);
        float r25812 = r25809 * r25811;
        float r25813 = r25807 * r25812;
        float r25814 = sin(r25808);
        float r25815 = -r25814;
        float r25816 = cos(r25810);
        float r25817 = r25809 * r25807;
        float r25818 = cos(r25806);
        float r25819 = r25818 * r25814;
        float r25820 = fma(r25816, r25817, r25819);
        float r25821 = asin(r25820);
        float r25822 = 3;
        float r25823 = pow(r25821, r25822);
        float r25824 = cbrt(r25823);
        float r25825 = sin(r25824);
        float r25826 = fma(r25815, r25825, r25818);
        float r25827 = atan2(r25813, r25826);
        float r25828 = lambda1;
        float r25829 = r25827 + r25828;
        return r25829;
}

double f_od(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r25830 = delta;
        double r25831 = sin(r25830);
        double r25832 = phi1;
        double r25833 = cos(r25832);
        double r25834 = theta;
        double r25835 = sin(r25834);
        double r25836 = r25833 * r25835;
        double r25837 = r25831 * r25836;
        double r25838 = sin(r25832);
        double r25839 = -r25838;
        double r25840 = cos(r25834);
        double r25841 = r25833 * r25831;
        double r25842 = cos(r25830);
        double r25843 = r25842 * r25838;
        double r25844 = fma(r25840, r25841, r25843);
        double r25845 = asin(r25844);
        double r25846 = 3;
        double r25847 = pow(r25845, r25846);
        double r25848 = cbrt(r25847);
        double r25849 = sin(r25848);
        double r25850 = fma(r25839, r25849, r25842);
        double r25851 = atan2(r25837, r25850);
        double r25852 = lambda1;
        double r25853 = r25851 + r25852;
        return r25853;
}

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 r25854, r25855, r25856, r25857, r25858, r25859, r25860, r25861, r25862, r25863, r25864, r25865, r25866, r25867, r25868, r25869, r25870, r25871, r25872, r25873, r25874, r25875;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        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);
        mpfr_init(r25870);
        mpfr_init(r25871);
        mpfr_init(r25872);
        mpfr_init(r25873);
        mpfr_init(r25874);
        mpfr_init(r25875);
}

double f_im(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        mpfr_set_d(r25854, lambda1, MPFR_RNDN);
        mpfr_set_d(r25855, theta, MPFR_RNDN);
        mpfr_sin(r25856, r25855, MPFR_RNDN);
        mpfr_set_d(r25857, delta, MPFR_RNDN);
        mpfr_sin(r25858, r25857, MPFR_RNDN);
        mpfr_mul(r25859, r25856, r25858, MPFR_RNDN);
        mpfr_set_d(r25860, phi1, MPFR_RNDN);
        mpfr_cos(r25861, r25860, MPFR_RNDN);
        mpfr_mul(r25862, r25859, r25861, MPFR_RNDN);
        mpfr_cos(r25863, r25857, MPFR_RNDN);
        mpfr_sin(r25864, r25860, MPFR_RNDN);
        mpfr_mul(r25865, r25864, r25863, MPFR_RNDN);
        mpfr_mul(r25866, r25861, r25858, MPFR_RNDN);
        mpfr_cos(r25867, r25855, MPFR_RNDN);
        mpfr_mul(r25868, r25866, r25867, MPFR_RNDN);
        mpfr_add(r25869, r25865, r25868, MPFR_RNDN);
        mpfr_asin(r25870, r25869, MPFR_RNDN);
        mpfr_sin(r25871, r25870, MPFR_RNDN);
        mpfr_mul(r25872, r25864, r25871, MPFR_RNDN);
        mpfr_sub(r25873, r25863, r25872, MPFR_RNDN);
        mpfr_atan2(r25874, r25862, r25873, MPFR_RNDN);
        mpfr_add(r25875, r25854, r25874, MPFR_RNDN);
        return mpfr_get_d(r25875, MPFR_RNDN);
}

static mpfr_t r25876, r25877, r25878, r25879, r25880, r25881, r25882, r25883, r25884, r25885, r25886, r25887, r25888, r25889, r25890, r25891, r25892, r25893, r25894, r25895, r25896, r25897, r25898, r25899;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        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, "3", 10, MPFR_RNDN);
        mpfr_init(r25893);
        mpfr_init(r25894);
        mpfr_init(r25895);
        mpfr_init(r25896);
        mpfr_init(r25897);
        mpfr_init(r25898);
        mpfr_init(r25899);
}

double f_fm(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        mpfr_set_d(r25876, delta, MPFR_RNDN);
        mpfr_sin(r25877, r25876, MPFR_RNDN);
        mpfr_set_d(r25878, phi1, MPFR_RNDN);
        mpfr_cos(r25879, r25878, MPFR_RNDN);
        mpfr_set_d(r25880, theta, MPFR_RNDN);
        mpfr_sin(r25881, r25880, MPFR_RNDN);
        mpfr_mul(r25882, r25879, r25881, MPFR_RNDN);
        mpfr_mul(r25883, r25877, r25882, MPFR_RNDN);
        mpfr_sin(r25884, r25878, MPFR_RNDN);
        mpfr_neg(r25885, r25884, MPFR_RNDN);
        mpfr_cos(r25886, r25880, MPFR_RNDN);
        mpfr_mul(r25887, r25879, r25877, MPFR_RNDN);
        mpfr_cos(r25888, r25876, MPFR_RNDN);
        mpfr_mul(r25889, r25888, r25884, MPFR_RNDN);
        mpfr_fma(r25890, r25886, r25887, r25889, MPFR_RNDN);
        mpfr_asin(r25891, r25890, MPFR_RNDN);
        ;
        mpfr_pow(r25893, r25891, r25892, MPFR_RNDN);
        mpfr_cbrt(r25894, r25893, MPFR_RNDN);
        mpfr_sin(r25895, r25894, MPFR_RNDN);
        mpfr_fma(r25896, r25885, r25895, r25888, MPFR_RNDN);
        mpfr_atan2(r25897, r25883, r25896, MPFR_RNDN);
        mpfr_set_d(r25898, lambda1, MPFR_RNDN);
        mpfr_add(r25899, r25897, r25898, MPFR_RNDN);
        return mpfr_get_d(r25899, MPFR_RNDN);
}

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;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        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);
        mpfr_init(r25910);
        mpfr_init(r25911);
        mpfr_init(r25912);
        mpfr_init(r25913);
        mpfr_init(r25914);
        mpfr_init(r25915);
        mpfr_init_set_str(r25916, "3", 10, MPFR_RNDN);
        mpfr_init(r25917);
        mpfr_init(r25918);
        mpfr_init(r25919);
        mpfr_init(r25920);
        mpfr_init(r25921);
        mpfr_init(r25922);
        mpfr_init(r25923);
}

double f_dm(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        mpfr_set_d(r25900, delta, MPFR_RNDN);
        mpfr_sin(r25901, r25900, MPFR_RNDN);
        mpfr_set_d(r25902, phi1, MPFR_RNDN);
        mpfr_cos(r25903, r25902, MPFR_RNDN);
        mpfr_set_d(r25904, theta, MPFR_RNDN);
        mpfr_sin(r25905, r25904, MPFR_RNDN);
        mpfr_mul(r25906, r25903, r25905, MPFR_RNDN);
        mpfr_mul(r25907, r25901, r25906, MPFR_RNDN);
        mpfr_sin(r25908, r25902, MPFR_RNDN);
        mpfr_neg(r25909, r25908, MPFR_RNDN);
        mpfr_cos(r25910, r25904, MPFR_RNDN);
        mpfr_mul(r25911, r25903, r25901, MPFR_RNDN);
        mpfr_cos(r25912, r25900, MPFR_RNDN);
        mpfr_mul(r25913, r25912, r25908, MPFR_RNDN);
        mpfr_fma(r25914, r25910, r25911, r25913, MPFR_RNDN);
        mpfr_asin(r25915, r25914, MPFR_RNDN);
        ;
        mpfr_pow(r25917, r25915, r25916, MPFR_RNDN);
        mpfr_cbrt(r25918, r25917, MPFR_RNDN);
        mpfr_sin(r25919, r25918, MPFR_RNDN);
        mpfr_fma(r25920, r25909, r25919, r25912, MPFR_RNDN);
        mpfr_atan2(r25921, r25907, r25920, MPFR_RNDN);
        mpfr_set_d(r25922, lambda1, MPFR_RNDN);
        mpfr_add(r25923, r25921, r25922, MPFR_RNDN);
        return mpfr_get_d(r25923, MPFR_RNDN);
}

