#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 r34773 = lambda1;
        float r34774 = theta;
        float r34775 = sin(r34774);
        float r34776 = delta;
        float r34777 = sin(r34776);
        float r34778 = r34775 * r34777;
        float r34779 = phi1;
        float r34780 = cos(r34779);
        float r34781 = r34778 * r34780;
        float r34782 = cos(r34776);
        float r34783 = sin(r34779);
        float r34784 = r34783 * r34782;
        float r34785 = r34780 * r34777;
        float r34786 = cos(r34774);
        float r34787 = r34785 * r34786;
        float r34788 = r34784 + r34787;
        float r34789 = asin(r34788);
        float r34790 = sin(r34789);
        float r34791 = r34783 * r34790;
        float r34792 = r34782 - r34791;
        float r34793 = atan2(r34781, r34792);
        float r34794 = r34773 + r34793;
        return r34794;
}

double f_id(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r34795 = lambda1;
        double r34796 = theta;
        double r34797 = sin(r34796);
        double r34798 = delta;
        double r34799 = sin(r34798);
        double r34800 = r34797 * r34799;
        double r34801 = phi1;
        double r34802 = cos(r34801);
        double r34803 = r34800 * r34802;
        double r34804 = cos(r34798);
        double r34805 = sin(r34801);
        double r34806 = r34805 * r34804;
        double r34807 = r34802 * r34799;
        double r34808 = cos(r34796);
        double r34809 = r34807 * r34808;
        double r34810 = r34806 + r34809;
        double r34811 = asin(r34810);
        double r34812 = sin(r34811);
        double r34813 = r34805 * r34812;
        double r34814 = r34804 - r34813;
        double r34815 = atan2(r34803, r34814);
        double r34816 = r34795 + r34815;
        return r34816;
}


double f_of(float lambda1, float phi1, float __attribute__((unused)) phi2, float delta, float theta) {
        float r34817 = lambda1;
        float r34818 = theta;
        float r34819 = sin(r34818);
        float r34820 = delta;
        float r34821 = sin(r34820);
        float r34822 = r34819 * r34821;
        float r34823 = phi1;
        float r34824 = cos(r34823);
        float r34825 = r34822 * r34824;
        float r34826 = cos(r34820);
        float r34827 = sin(r34823);
        float r34828 = r34826 * r34827;
        float r34829 = cos(r34818);
        float r34830 = r34821 * r34829;
        float r34831 = r34830 * r34824;
        float r34832 = r34828 + r34831;
        float r34833 = asin(r34832);
        float r34834 = sin(r34833);
        float r34835 = r34834 * r34827;
        float r34836 = 3;
        float r34837 = pow(r34835, r34836);
        float r34838 = cbrt(r34837);
        float r34839 = r34826 - r34838;
        float r34840 = atan2(r34825, r34839);
        float r34841 = r34817 + r34840;
        return r34841;
}

double f_od(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r34842 = lambda1;
        double r34843 = theta;
        double r34844 = sin(r34843);
        double r34845 = delta;
        double r34846 = sin(r34845);
        double r34847 = r34844 * r34846;
        double r34848 = phi1;
        double r34849 = cos(r34848);
        double r34850 = r34847 * r34849;
        double r34851 = cos(r34845);
        double r34852 = sin(r34848);
        double r34853 = r34851 * r34852;
        double r34854 = cos(r34843);
        double r34855 = r34846 * r34854;
        double r34856 = r34855 * r34849;
        double r34857 = r34853 + r34856;
        double r34858 = asin(r34857);
        double r34859 = sin(r34858);
        double r34860 = r34859 * r34852;
        double r34861 = 3;
        double r34862 = pow(r34860, r34861);
        double r34863 = cbrt(r34862);
        double r34864 = r34851 - r34863;
        double r34865 = atan2(r34850, r34864);
        double r34866 = r34842 + r34865;
        return r34866;
}

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 r34867, r34868, r34869, r34870, r34871, r34872, r34873, r34874, r34875, r34876, r34877, r34878, r34879, r34880, r34881, r34882, r34883, r34884, r34885, r34886, r34887, r34888;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r34867);
        mpfr_init(r34868);
        mpfr_init(r34869);
        mpfr_init(r34870);
        mpfr_init(r34871);
        mpfr_init(r34872);
        mpfr_init(r34873);
        mpfr_init(r34874);
        mpfr_init(r34875);
        mpfr_init(r34876);
        mpfr_init(r34877);
        mpfr_init(r34878);
        mpfr_init(r34879);
        mpfr_init(r34880);
        mpfr_init(r34881);
        mpfr_init(r34882);
        mpfr_init(r34883);
        mpfr_init(r34884);
        mpfr_init(r34885);
        mpfr_init(r34886);
        mpfr_init(r34887);
        mpfr_init(r34888);
}

double f_im(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        mpfr_set_d(r34867, lambda1, MPFR_RNDN);
        mpfr_set_d(r34868, theta, MPFR_RNDN);
        mpfr_sin(r34869, r34868, MPFR_RNDN);
        mpfr_set_d(r34870, delta, MPFR_RNDN);
        mpfr_sin(r34871, r34870, MPFR_RNDN);
        mpfr_mul(r34872, r34869, r34871, MPFR_RNDN);
        mpfr_set_d(r34873, phi1, MPFR_RNDN);
        mpfr_cos(r34874, r34873, MPFR_RNDN);
        mpfr_mul(r34875, r34872, r34874, MPFR_RNDN);
        mpfr_cos(r34876, r34870, MPFR_RNDN);
        mpfr_sin(r34877, r34873, MPFR_RNDN);
        mpfr_mul(r34878, r34877, r34876, MPFR_RNDN);
        mpfr_mul(r34879, r34874, r34871, MPFR_RNDN);
        mpfr_cos(r34880, r34868, MPFR_RNDN);
        mpfr_mul(r34881, r34879, r34880, MPFR_RNDN);
        mpfr_add(r34882, r34878, r34881, MPFR_RNDN);
        mpfr_asin(r34883, r34882, MPFR_RNDN);
        mpfr_sin(r34884, r34883, MPFR_RNDN);
        mpfr_mul(r34885, r34877, r34884, MPFR_RNDN);
        mpfr_sub(r34886, r34876, r34885, MPFR_RNDN);
        mpfr_atan2(r34887, r34875, r34886, MPFR_RNDN);
        mpfr_add(r34888, r34867, r34887, MPFR_RNDN);
        return mpfr_get_d(r34888, MPFR_RNDN);
}

static mpfr_t r34889, r34890, r34891, r34892, r34893, r34894, r34895, r34896, r34897, r34898, r34899, r34900, r34901, r34902, r34903, r34904, r34905, r34906, r34907, r34908, r34909, r34910, r34911, r34912, r34913;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r34889);
        mpfr_init(r34890);
        mpfr_init(r34891);
        mpfr_init(r34892);
        mpfr_init(r34893);
        mpfr_init(r34894);
        mpfr_init(r34895);
        mpfr_init(r34896);
        mpfr_init(r34897);
        mpfr_init(r34898);
        mpfr_init(r34899);
        mpfr_init(r34900);
        mpfr_init(r34901);
        mpfr_init(r34902);
        mpfr_init(r34903);
        mpfr_init(r34904);
        mpfr_init(r34905);
        mpfr_init(r34906);
        mpfr_init(r34907);
        mpfr_init_set_str(r34908, "3", 10, MPFR_RNDN);
        mpfr_init(r34909);
        mpfr_init(r34910);
        mpfr_init(r34911);
        mpfr_init(r34912);
        mpfr_init(r34913);
}

double f_fm(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        mpfr_set_d(r34889, lambda1, MPFR_RNDN);
        mpfr_set_d(r34890, theta, MPFR_RNDN);
        mpfr_sin(r34891, r34890, MPFR_RNDN);
        mpfr_set_d(r34892, delta, MPFR_RNDN);
        mpfr_sin(r34893, r34892, MPFR_RNDN);
        mpfr_mul(r34894, r34891, r34893, MPFR_RNDN);
        mpfr_set_d(r34895, phi1, MPFR_RNDN);
        mpfr_cos(r34896, r34895, MPFR_RNDN);
        mpfr_mul(r34897, r34894, r34896, MPFR_RNDN);
        mpfr_cos(r34898, r34892, MPFR_RNDN);
        mpfr_sin(r34899, r34895, MPFR_RNDN);
        mpfr_mul(r34900, r34898, r34899, MPFR_RNDN);
        mpfr_cos(r34901, r34890, MPFR_RNDN);
        mpfr_mul(r34902, r34893, r34901, MPFR_RNDN);
        mpfr_mul(r34903, r34902, r34896, MPFR_RNDN);
        mpfr_add(r34904, r34900, r34903, MPFR_RNDN);
        mpfr_asin(r34905, r34904, MPFR_RNDN);
        mpfr_sin(r34906, r34905, MPFR_RNDN);
        mpfr_mul(r34907, r34906, r34899, MPFR_RNDN);
        ;
        mpfr_pow(r34909, r34907, r34908, MPFR_RNDN);
        mpfr_cbrt(r34910, r34909, MPFR_RNDN);
        mpfr_sub(r34911, r34898, r34910, MPFR_RNDN);
        mpfr_atan2(r34912, r34897, r34911, MPFR_RNDN);
        mpfr_add(r34913, r34889, r34912, MPFR_RNDN);
        return mpfr_get_d(r34913, MPFR_RNDN);
}

static mpfr_t r34914, r34915, r34916, r34917, r34918, r34919, r34920, r34921, r34922, r34923, r34924, r34925, r34926, r34927, r34928, r34929, r34930, r34931, r34932, r34933, r34934, r34935, r34936, r34937, r34938;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r34914);
        mpfr_init(r34915);
        mpfr_init(r34916);
        mpfr_init(r34917);
        mpfr_init(r34918);
        mpfr_init(r34919);
        mpfr_init(r34920);
        mpfr_init(r34921);
        mpfr_init(r34922);
        mpfr_init(r34923);
        mpfr_init(r34924);
        mpfr_init(r34925);
        mpfr_init(r34926);
        mpfr_init(r34927);
        mpfr_init(r34928);
        mpfr_init(r34929);
        mpfr_init(r34930);
        mpfr_init(r34931);
        mpfr_init(r34932);
        mpfr_init_set_str(r34933, "3", 10, MPFR_RNDN);
        mpfr_init(r34934);
        mpfr_init(r34935);
        mpfr_init(r34936);
        mpfr_init(r34937);
        mpfr_init(r34938);
}

double f_dm(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        mpfr_set_d(r34914, lambda1, MPFR_RNDN);
        mpfr_set_d(r34915, theta, MPFR_RNDN);
        mpfr_sin(r34916, r34915, MPFR_RNDN);
        mpfr_set_d(r34917, delta, MPFR_RNDN);
        mpfr_sin(r34918, r34917, MPFR_RNDN);
        mpfr_mul(r34919, r34916, r34918, MPFR_RNDN);
        mpfr_set_d(r34920, phi1, MPFR_RNDN);
        mpfr_cos(r34921, r34920, MPFR_RNDN);
        mpfr_mul(r34922, r34919, r34921, MPFR_RNDN);
        mpfr_cos(r34923, r34917, MPFR_RNDN);
        mpfr_sin(r34924, r34920, MPFR_RNDN);
        mpfr_mul(r34925, r34923, r34924, MPFR_RNDN);
        mpfr_cos(r34926, r34915, MPFR_RNDN);
        mpfr_mul(r34927, r34918, r34926, MPFR_RNDN);
        mpfr_mul(r34928, r34927, r34921, MPFR_RNDN);
        mpfr_add(r34929, r34925, r34928, MPFR_RNDN);
        mpfr_asin(r34930, r34929, MPFR_RNDN);
        mpfr_sin(r34931, r34930, MPFR_RNDN);
        mpfr_mul(r34932, r34931, r34924, MPFR_RNDN);
        ;
        mpfr_pow(r34934, r34932, r34933, MPFR_RNDN);
        mpfr_cbrt(r34935, r34934, MPFR_RNDN);
        mpfr_sub(r34936, r34923, r34935, MPFR_RNDN);
        mpfr_atan2(r34937, r34922, r34936, MPFR_RNDN);
        mpfr_add(r34938, r34914, r34937, MPFR_RNDN);
        return mpfr_get_d(r34938, MPFR_RNDN);
}

