#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 r25992 = lambda1;
        float r25993 = theta;
        float r25994 = sin(r25993);
        float r25995 = delta;
        float r25996 = sin(r25995);
        float r25997 = r25994 * r25996;
        float r25998 = phi1;
        float r25999 = cos(r25998);
        float r26000 = r25997 * r25999;
        float r26001 = cos(r25995);
        float r26002 = sin(r25998);
        float r26003 = r26002 * r26001;
        float r26004 = r25999 * r25996;
        float r26005 = cos(r25993);
        float r26006 = r26004 * r26005;
        float r26007 = r26003 + r26006;
        float r26008 = asin(r26007);
        float r26009 = sin(r26008);
        float r26010 = r26002 * r26009;
        float r26011 = r26001 - r26010;
        float r26012 = atan2(r26000, r26011);
        float r26013 = r25992 + r26012;
        return r26013;
}

double f_id(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r26014 = lambda1;
        double r26015 = theta;
        double r26016 = sin(r26015);
        double r26017 = delta;
        double r26018 = sin(r26017);
        double r26019 = r26016 * r26018;
        double r26020 = phi1;
        double r26021 = cos(r26020);
        double r26022 = r26019 * r26021;
        double r26023 = cos(r26017);
        double r26024 = sin(r26020);
        double r26025 = r26024 * r26023;
        double r26026 = r26021 * r26018;
        double r26027 = cos(r26015);
        double r26028 = r26026 * r26027;
        double r26029 = r26025 + r26028;
        double r26030 = asin(r26029);
        double r26031 = sin(r26030);
        double r26032 = r26024 * r26031;
        double r26033 = r26023 - r26032;
        double r26034 = atan2(r26022, r26033);
        double r26035 = r26014 + r26034;
        return r26035;
}


double f_of(float lambda1, float phi1, float __attribute__((unused)) phi2, float delta, float theta) {
        float r26036 = lambda1;
        float r26037 = theta;
        float r26038 = sin(r26037);
        float r26039 = delta;
        float r26040 = sin(r26039);
        float r26041 = r26038 * r26040;
        float r26042 = phi1;
        float r26043 = cos(r26042);
        float r26044 = r26041 * r26043;
        float r26045 = cos(r26039);
        float r26046 = 3;
        float r26047 = pow(r26045, r26046);
        float r26048 = sin(r26042);
        float r26049 = r26048 * r26045;
        float r26050 = r26043 * r26040;
        float r26051 = cos(r26037);
        float r26052 = r26050 * r26051;
        float r26053 = r26049 + r26052;
        float r26054 = asin(r26053);
        float r26055 = sin(r26054);
        float r26056 = r26048 * r26055;
        float r26057 = pow(r26056, r26046);
        float r26058 = r26047 - r26057;
        float r26059 = r26045 * r26045;
        float r26060 = r26056 * r26056;
        float r26061 = cbrt(r26060);
        float r26062 = r26061 * r26061;
        float r26063 = r26062 * r26061;
        float r26064 = r26045 * r26056;
        float r26065 = r26063 + r26064;
        float r26066 = r26059 + r26065;
        float r26067 = r26058 / r26066;
        float r26068 = atan2(r26044, r26067);
        float r26069 = r26036 + r26068;
        return r26069;
}

double f_od(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r26070 = lambda1;
        double r26071 = theta;
        double r26072 = sin(r26071);
        double r26073 = delta;
        double r26074 = sin(r26073);
        double r26075 = r26072 * r26074;
        double r26076 = phi1;
        double r26077 = cos(r26076);
        double r26078 = r26075 * r26077;
        double r26079 = cos(r26073);
        double r26080 = 3;
        double r26081 = pow(r26079, r26080);
        double r26082 = sin(r26076);
        double r26083 = r26082 * r26079;
        double r26084 = r26077 * r26074;
        double r26085 = cos(r26071);
        double r26086 = r26084 * r26085;
        double r26087 = r26083 + r26086;
        double r26088 = asin(r26087);
        double r26089 = sin(r26088);
        double r26090 = r26082 * r26089;
        double r26091 = pow(r26090, r26080);
        double r26092 = r26081 - r26091;
        double r26093 = r26079 * r26079;
        double r26094 = r26090 * r26090;
        double r26095 = cbrt(r26094);
        double r26096 = r26095 * r26095;
        double r26097 = r26096 * r26095;
        double r26098 = r26079 * r26090;
        double r26099 = r26097 + r26098;
        double r26100 = r26093 + r26099;
        double r26101 = r26092 / r26100;
        double r26102 = atan2(r26078, r26101);
        double r26103 = r26070 + r26102;
        return r26103;
}

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 r26104, r26105, r26106, r26107, r26108, r26109, r26110, r26111, r26112, r26113, r26114, r26115, r26116, r26117, r26118, r26119, r26120, r26121, r26122, r26123, r26124, r26125;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r26104);
        mpfr_init(r26105);
        mpfr_init(r26106);
        mpfr_init(r26107);
        mpfr_init(r26108);
        mpfr_init(r26109);
        mpfr_init(r26110);
        mpfr_init(r26111);
        mpfr_init(r26112);
        mpfr_init(r26113);
        mpfr_init(r26114);
        mpfr_init(r26115);
        mpfr_init(r26116);
        mpfr_init(r26117);
        mpfr_init(r26118);
        mpfr_init(r26119);
        mpfr_init(r26120);
        mpfr_init(r26121);
        mpfr_init(r26122);
        mpfr_init(r26123);
        mpfr_init(r26124);
        mpfr_init(r26125);
}

double f_im(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        mpfr_set_d(r26104, lambda1, MPFR_RNDN);
        mpfr_set_d(r26105, theta, MPFR_RNDN);
        mpfr_sin(r26106, r26105, MPFR_RNDN);
        mpfr_set_d(r26107, delta, MPFR_RNDN);
        mpfr_sin(r26108, r26107, MPFR_RNDN);
        mpfr_mul(r26109, r26106, r26108, MPFR_RNDN);
        mpfr_set_d(r26110, phi1, MPFR_RNDN);
        mpfr_cos(r26111, r26110, MPFR_RNDN);
        mpfr_mul(r26112, r26109, r26111, MPFR_RNDN);
        mpfr_cos(r26113, r26107, MPFR_RNDN);
        mpfr_sin(r26114, r26110, MPFR_RNDN);
        mpfr_mul(r26115, r26114, r26113, MPFR_RNDN);
        mpfr_mul(r26116, r26111, r26108, MPFR_RNDN);
        mpfr_cos(r26117, r26105, MPFR_RNDN);
        mpfr_mul(r26118, r26116, r26117, MPFR_RNDN);
        mpfr_add(r26119, r26115, r26118, MPFR_RNDN);
        mpfr_asin(r26120, r26119, MPFR_RNDN);
        mpfr_sin(r26121, r26120, MPFR_RNDN);
        mpfr_mul(r26122, r26114, r26121, MPFR_RNDN);
        mpfr_sub(r26123, r26113, r26122, MPFR_RNDN);
        mpfr_atan2(r26124, r26112, r26123, MPFR_RNDN);
        mpfr_add(r26125, r26104, r26124, MPFR_RNDN);
        return mpfr_get_d(r26125, MPFR_RNDN);
}

static mpfr_t r26126, r26127, r26128, r26129, r26130, r26131, r26132, r26133, r26134, r26135, r26136, r26137, r26138, r26139, r26140, r26141, r26142, r26143, r26144, r26145, r26146, r26147, r26148, r26149, r26150, r26151, r26152, r26153, r26154, r26155, r26156, r26157, r26158, r26159;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r26126);
        mpfr_init(r26127);
        mpfr_init(r26128);
        mpfr_init(r26129);
        mpfr_init(r26130);
        mpfr_init(r26131);
        mpfr_init(r26132);
        mpfr_init(r26133);
        mpfr_init(r26134);
        mpfr_init(r26135);
        mpfr_init_set_str(r26136, "3", 10, MPFR_RNDN);
        mpfr_init(r26137);
        mpfr_init(r26138);
        mpfr_init(r26139);
        mpfr_init(r26140);
        mpfr_init(r26141);
        mpfr_init(r26142);
        mpfr_init(r26143);
        mpfr_init(r26144);
        mpfr_init(r26145);
        mpfr_init(r26146);
        mpfr_init(r26147);
        mpfr_init(r26148);
        mpfr_init(r26149);
        mpfr_init(r26150);
        mpfr_init(r26151);
        mpfr_init(r26152);
        mpfr_init(r26153);
        mpfr_init(r26154);
        mpfr_init(r26155);
        mpfr_init(r26156);
        mpfr_init(r26157);
        mpfr_init(r26158);
        mpfr_init(r26159);
}

double f_fm(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        mpfr_set_d(r26126, lambda1, MPFR_RNDN);
        mpfr_set_d(r26127, theta, MPFR_RNDN);
        mpfr_sin(r26128, r26127, MPFR_RNDN);
        mpfr_set_d(r26129, delta, MPFR_RNDN);
        mpfr_sin(r26130, r26129, MPFR_RNDN);
        mpfr_mul(r26131, r26128, r26130, MPFR_RNDN);
        mpfr_set_d(r26132, phi1, MPFR_RNDN);
        mpfr_cos(r26133, r26132, MPFR_RNDN);
        mpfr_mul(r26134, r26131, r26133, MPFR_RNDN);
        mpfr_cos(r26135, r26129, MPFR_RNDN);
        ;
        mpfr_pow(r26137, r26135, r26136, MPFR_RNDN);
        mpfr_sin(r26138, r26132, MPFR_RNDN);
        mpfr_mul(r26139, r26138, r26135, MPFR_RNDN);
        mpfr_mul(r26140, r26133, r26130, MPFR_RNDN);
        mpfr_cos(r26141, r26127, MPFR_RNDN);
        mpfr_mul(r26142, r26140, r26141, MPFR_RNDN);
        mpfr_add(r26143, r26139, r26142, MPFR_RNDN);
        mpfr_asin(r26144, r26143, MPFR_RNDN);
        mpfr_sin(r26145, r26144, MPFR_RNDN);
        mpfr_mul(r26146, r26138, r26145, MPFR_RNDN);
        mpfr_pow(r26147, r26146, r26136, MPFR_RNDN);
        mpfr_sub(r26148, r26137, r26147, MPFR_RNDN);
        mpfr_mul(r26149, r26135, r26135, MPFR_RNDN);
        mpfr_mul(r26150, r26146, r26146, MPFR_RNDN);
        mpfr_cbrt(r26151, r26150, MPFR_RNDN);
        mpfr_mul(r26152, r26151, r26151, MPFR_RNDN);
        mpfr_mul(r26153, r26152, r26151, MPFR_RNDN);
        mpfr_mul(r26154, r26135, r26146, MPFR_RNDN);
        mpfr_add(r26155, r26153, r26154, MPFR_RNDN);
        mpfr_add(r26156, r26149, r26155, MPFR_RNDN);
        mpfr_div(r26157, r26148, r26156, MPFR_RNDN);
        mpfr_atan2(r26158, r26134, r26157, MPFR_RNDN);
        mpfr_add(r26159, r26126, r26158, MPFR_RNDN);
        return mpfr_get_d(r26159, MPFR_RNDN);
}

static mpfr_t r26160, r26161, r26162, r26163, r26164, r26165, r26166, r26167, r26168, r26169, r26170, r26171, r26172, r26173, r26174, r26175, r26176, r26177, r26178, r26179, r26180, r26181, r26182, r26183, r26184, r26185, r26186, r26187, r26188, r26189, r26190, r26191, r26192, r26193;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r26160);
        mpfr_init(r26161);
        mpfr_init(r26162);
        mpfr_init(r26163);
        mpfr_init(r26164);
        mpfr_init(r26165);
        mpfr_init(r26166);
        mpfr_init(r26167);
        mpfr_init(r26168);
        mpfr_init(r26169);
        mpfr_init_set_str(r26170, "3", 10, MPFR_RNDN);
        mpfr_init(r26171);
        mpfr_init(r26172);
        mpfr_init(r26173);
        mpfr_init(r26174);
        mpfr_init(r26175);
        mpfr_init(r26176);
        mpfr_init(r26177);
        mpfr_init(r26178);
        mpfr_init(r26179);
        mpfr_init(r26180);
        mpfr_init(r26181);
        mpfr_init(r26182);
        mpfr_init(r26183);
        mpfr_init(r26184);
        mpfr_init(r26185);
        mpfr_init(r26186);
        mpfr_init(r26187);
        mpfr_init(r26188);
        mpfr_init(r26189);
        mpfr_init(r26190);
        mpfr_init(r26191);
        mpfr_init(r26192);
        mpfr_init(r26193);
}

double f_dm(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        mpfr_set_d(r26160, lambda1, MPFR_RNDN);
        mpfr_set_d(r26161, theta, MPFR_RNDN);
        mpfr_sin(r26162, r26161, MPFR_RNDN);
        mpfr_set_d(r26163, delta, MPFR_RNDN);
        mpfr_sin(r26164, r26163, MPFR_RNDN);
        mpfr_mul(r26165, r26162, r26164, MPFR_RNDN);
        mpfr_set_d(r26166, phi1, MPFR_RNDN);
        mpfr_cos(r26167, r26166, MPFR_RNDN);
        mpfr_mul(r26168, r26165, r26167, MPFR_RNDN);
        mpfr_cos(r26169, r26163, MPFR_RNDN);
        ;
        mpfr_pow(r26171, r26169, r26170, MPFR_RNDN);
        mpfr_sin(r26172, r26166, MPFR_RNDN);
        mpfr_mul(r26173, r26172, r26169, MPFR_RNDN);
        mpfr_mul(r26174, r26167, r26164, MPFR_RNDN);
        mpfr_cos(r26175, r26161, MPFR_RNDN);
        mpfr_mul(r26176, r26174, r26175, MPFR_RNDN);
        mpfr_add(r26177, r26173, r26176, MPFR_RNDN);
        mpfr_asin(r26178, r26177, MPFR_RNDN);
        mpfr_sin(r26179, r26178, MPFR_RNDN);
        mpfr_mul(r26180, r26172, r26179, MPFR_RNDN);
        mpfr_pow(r26181, r26180, r26170, MPFR_RNDN);
        mpfr_sub(r26182, r26171, r26181, MPFR_RNDN);
        mpfr_mul(r26183, r26169, r26169, MPFR_RNDN);
        mpfr_mul(r26184, r26180, r26180, MPFR_RNDN);
        mpfr_cbrt(r26185, r26184, MPFR_RNDN);
        mpfr_mul(r26186, r26185, r26185, MPFR_RNDN);
        mpfr_mul(r26187, r26186, r26185, MPFR_RNDN);
        mpfr_mul(r26188, r26169, r26180, MPFR_RNDN);
        mpfr_add(r26189, r26187, r26188, MPFR_RNDN);
        mpfr_add(r26190, r26183, r26189, MPFR_RNDN);
        mpfr_div(r26191, r26182, r26190, MPFR_RNDN);
        mpfr_atan2(r26192, r26168, r26191, MPFR_RNDN);
        mpfr_add(r26193, r26160, r26192, MPFR_RNDN);
        return mpfr_get_d(r26193, MPFR_RNDN);
}

