#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 r9063 = R;
        float r9064 = 2.0f;
        float r9065 = phi1;
        float r9066 = phi2;
        float r9067 = r9065 - r9066;
        float r9068 = r9067 / r9064;
        float r9069 = sin(r9068);
        float r9070 = pow(r9069, r9064);
        float r9071 = cos(r9065);
        float r9072 = cos(r9066);
        float r9073 = r9071 * r9072;
        float r9074 = lambda1;
        float r9075 = lambda2;
        float r9076 = r9074 - r9075;
        float r9077 = r9076 / r9064;
        float r9078 = sin(r9077);
        float r9079 = r9073 * r9078;
        float r9080 = r9079 * r9078;
        float r9081 = r9070 + r9080;
        float r9082 = sqrt(r9081);
        float r9083 = 1.0f;
        float r9084 = r9083 - r9081;
        float r9085 = sqrt(r9084);
        float r9086 = atan2(r9082, r9085);
        float r9087 = r9064 * r9086;
        float r9088 = r9063 * r9087;
        return r9088;
}

double f_id(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r9089 = R;
        double r9090 = 2.0;
        double r9091 = phi1;
        double r9092 = phi2;
        double r9093 = r9091 - r9092;
        double r9094 = r9093 / r9090;
        double r9095 = sin(r9094);
        double r9096 = pow(r9095, r9090);
        double r9097 = cos(r9091);
        double r9098 = cos(r9092);
        double r9099 = r9097 * r9098;
        double r9100 = lambda1;
        double r9101 = lambda2;
        double r9102 = r9100 - r9101;
        double r9103 = r9102 / r9090;
        double r9104 = sin(r9103);
        double r9105 = r9099 * r9104;
        double r9106 = r9105 * r9104;
        double r9107 = r9096 + r9106;
        double r9108 = sqrt(r9107);
        double r9109 = 1.0;
        double r9110 = r9109 - r9107;
        double r9111 = sqrt(r9110);
        double r9112 = atan2(r9108, r9111);
        double r9113 = r9090 * r9112;
        double r9114 = r9089 * r9113;
        return r9114;
}


double f_of(float R, float lambda1, float lambda2, float phi1, float phi2) {
        float r9115 = lambda1;
        float r9116 = lambda2;
        float r9117 = r9115 - r9116;
        float r9118 = 2.0f;
        float r9119 = r9117 / r9118;
        float r9120 = sin(r9119);
        float r9121 = phi2;
        float r9122 = cos(r9121);
        float r9123 = phi1;
        float r9124 = cos(r9123);
        float r9125 = r9122 * r9124;
        float r9126 = r9125 * r9120;
        float r9127 = r9120 * r9126;
        float r9128 = r9123 - r9121;
        float r9129 = r9128 / r9118;
        float r9130 = sin(r9129);
        float r9131 = pow(r9130, r9118);
        float r9132 = r9127 + r9131;
        float r9133 = sqrt(r9132);
        float r9134 = 1.0f;
        float r9135 = r9121 / r9118;
        float r9136 = cos(r9135);
        float r9137 = r9123 / r9118;
        float r9138 = sin(r9137);
        float r9139 = r9136 * r9138;
        float r9140 = sin(r9135);
        float r9141 = cos(r9137);
        float r9142 = r9140 * r9141;
        float r9143 = r9139 - r9142;
        float r9144 = pow(r9143, r9118);
        float r9145 = r9144 + r9127;
        float r9146 = r9134 - r9145;
        float r9147 = sqrt(r9146);
        float r9148 = atan2(r9133, r9147);
        float r9149 = r9148 * r9118;
        float r9150 = R;
        float r9151 = r9149 * r9150;
        return r9151;
}

double f_od(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r9152 = lambda1;
        double r9153 = lambda2;
        double r9154 = r9152 - r9153;
        double r9155 = 2.0;
        double r9156 = r9154 / r9155;
        double r9157 = sin(r9156);
        double r9158 = phi2;
        double r9159 = cos(r9158);
        double r9160 = phi1;
        double r9161 = cos(r9160);
        double r9162 = r9159 * r9161;
        double r9163 = r9162 * r9157;
        double r9164 = r9157 * r9163;
        double r9165 = r9160 - r9158;
        double r9166 = r9165 / r9155;
        double r9167 = sin(r9166);
        double r9168 = pow(r9167, r9155);
        double r9169 = r9164 + r9168;
        double r9170 = sqrt(r9169);
        double r9171 = 1.0;
        double r9172 = r9158 / r9155;
        double r9173 = cos(r9172);
        double r9174 = r9160 / r9155;
        double r9175 = sin(r9174);
        double r9176 = r9173 * r9175;
        double r9177 = sin(r9172);
        double r9178 = cos(r9174);
        double r9179 = r9177 * r9178;
        double r9180 = r9176 - r9179;
        double r9181 = pow(r9180, r9155);
        double r9182 = r9181 + r9164;
        double r9183 = r9171 - r9182;
        double r9184 = sqrt(r9183);
        double r9185 = atan2(r9170, r9184);
        double r9186 = r9185 * r9155;
        double r9187 = R;
        double r9188 = r9186 * r9187;
        return r9188;
}

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 r9189, r9190, r9191, r9192, r9193, r9194, r9195, r9196, r9197, r9198, r9199, r9200, r9201, r9202, r9203, r9204, r9205, r9206, r9207, r9208, r9209, r9210, r9211, r9212, r9213, r9214;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r9189);
        mpfr_init_set_str(r9190, "2", 10, MPFR_RNDN);
        mpfr_init(r9191);
        mpfr_init(r9192);
        mpfr_init(r9193);
        mpfr_init(r9194);
        mpfr_init(r9195);
        mpfr_init(r9196);
        mpfr_init(r9197);
        mpfr_init(r9198);
        mpfr_init(r9199);
        mpfr_init(r9200);
        mpfr_init(r9201);
        mpfr_init(r9202);
        mpfr_init(r9203);
        mpfr_init(r9204);
        mpfr_init(r9205);
        mpfr_init(r9206);
        mpfr_init(r9207);
        mpfr_init(r9208);
        mpfr_init_set_str(r9209, "1", 10, MPFR_RNDN);
        mpfr_init(r9210);
        mpfr_init(r9211);
        mpfr_init(r9212);
        mpfr_init(r9213);
        mpfr_init(r9214);
}

double f_im(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r9189, R, MPFR_RNDN);
        ;
        mpfr_set_d(r9191, phi1, MPFR_RNDN);
        mpfr_set_d(r9192, phi2, MPFR_RNDN);
        mpfr_sub(r9193, r9191, r9192, MPFR_RNDN);
        mpfr_div(r9194, r9193, r9190, MPFR_RNDN);
        mpfr_sin(r9195, r9194, MPFR_RNDN);
        mpfr_pow(r9196, r9195, r9190, MPFR_RNDN);
        mpfr_cos(r9197, r9191, MPFR_RNDN);
        mpfr_cos(r9198, r9192, MPFR_RNDN);
        mpfr_mul(r9199, r9197, r9198, MPFR_RNDN);
        mpfr_set_d(r9200, lambda1, MPFR_RNDN);
        mpfr_set_d(r9201, lambda2, MPFR_RNDN);
        mpfr_sub(r9202, r9200, r9201, MPFR_RNDN);
        mpfr_div(r9203, r9202, r9190, MPFR_RNDN);
        mpfr_sin(r9204, r9203, MPFR_RNDN);
        mpfr_mul(r9205, r9199, r9204, MPFR_RNDN);
        mpfr_mul(r9206, r9205, r9204, MPFR_RNDN);
        mpfr_add(r9207, r9196, r9206, MPFR_RNDN);
        mpfr_sqrt(r9208, r9207, MPFR_RNDN);
        ;
        mpfr_sub(r9210, r9209, r9207, MPFR_RNDN);
        mpfr_sqrt(r9211, r9210, MPFR_RNDN);
        mpfr_atan2(r9212, r9208, r9211, MPFR_RNDN);
        mpfr_mul(r9213, r9190, r9212, MPFR_RNDN);
        mpfr_mul(r9214, r9189, r9213, MPFR_RNDN);
        return mpfr_get_d(r9214, MPFR_RNDN);
}

static mpfr_t r9215, r9216, r9217, r9218, r9219, r9220, r9221, r9222, r9223, r9224, r9225, r9226, r9227, r9228, r9229, r9230, r9231, r9232, r9233, r9234, r9235, r9236, r9237, r9238, r9239, r9240, r9241, r9242, r9243, r9244, r9245, r9246, r9247, r9248, r9249, r9250, r9251;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r9215);
        mpfr_init(r9216);
        mpfr_init(r9217);
        mpfr_init_set_str(r9218, "2", 10, MPFR_RNDN);
        mpfr_init(r9219);
        mpfr_init(r9220);
        mpfr_init(r9221);
        mpfr_init(r9222);
        mpfr_init(r9223);
        mpfr_init(r9224);
        mpfr_init(r9225);
        mpfr_init(r9226);
        mpfr_init(r9227);
        mpfr_init(r9228);
        mpfr_init(r9229);
        mpfr_init(r9230);
        mpfr_init(r9231);
        mpfr_init(r9232);
        mpfr_init(r9233);
        mpfr_init_set_str(r9234, "1", 10, MPFR_RNDN);
        mpfr_init(r9235);
        mpfr_init(r9236);
        mpfr_init(r9237);
        mpfr_init(r9238);
        mpfr_init(r9239);
        mpfr_init(r9240);
        mpfr_init(r9241);
        mpfr_init(r9242);
        mpfr_init(r9243);
        mpfr_init(r9244);
        mpfr_init(r9245);
        mpfr_init(r9246);
        mpfr_init(r9247);
        mpfr_init(r9248);
        mpfr_init(r9249);
        mpfr_init(r9250);
        mpfr_init(r9251);
}

double f_fm(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r9215, lambda1, MPFR_RNDN);
        mpfr_set_d(r9216, lambda2, MPFR_RNDN);
        mpfr_sub(r9217, r9215, r9216, MPFR_RNDN);
        ;
        mpfr_div(r9219, r9217, r9218, MPFR_RNDN);
        mpfr_sin(r9220, r9219, MPFR_RNDN);
        mpfr_set_d(r9221, phi2, MPFR_RNDN);
        mpfr_cos(r9222, r9221, MPFR_RNDN);
        mpfr_set_d(r9223, phi1, MPFR_RNDN);
        mpfr_cos(r9224, r9223, MPFR_RNDN);
        mpfr_mul(r9225, r9222, r9224, MPFR_RNDN);
        mpfr_mul(r9226, r9225, r9220, MPFR_RNDN);
        mpfr_mul(r9227, r9220, r9226, MPFR_RNDN);
        mpfr_sub(r9228, r9223, r9221, MPFR_RNDN);
        mpfr_div(r9229, r9228, r9218, MPFR_RNDN);
        mpfr_sin(r9230, r9229, MPFR_RNDN);
        mpfr_pow(r9231, r9230, r9218, MPFR_RNDN);
        mpfr_add(r9232, r9227, r9231, MPFR_RNDN);
        mpfr_sqrt(r9233, r9232, MPFR_RNDN);
        ;
        mpfr_div(r9235, r9221, r9218, MPFR_RNDN);
        mpfr_cos(r9236, r9235, MPFR_RNDN);
        mpfr_div(r9237, r9223, r9218, MPFR_RNDN);
        mpfr_sin(r9238, r9237, MPFR_RNDN);
        mpfr_mul(r9239, r9236, r9238, MPFR_RNDN);
        mpfr_sin(r9240, r9235, MPFR_RNDN);
        mpfr_cos(r9241, r9237, MPFR_RNDN);
        mpfr_mul(r9242, r9240, r9241, MPFR_RNDN);
        mpfr_sub(r9243, r9239, r9242, MPFR_RNDN);
        mpfr_pow(r9244, r9243, r9218, MPFR_RNDN);
        mpfr_add(r9245, r9244, r9227, MPFR_RNDN);
        mpfr_sub(r9246, r9234, r9245, MPFR_RNDN);
        mpfr_sqrt(r9247, r9246, MPFR_RNDN);
        mpfr_atan2(r9248, r9233, r9247, MPFR_RNDN);
        mpfr_mul(r9249, r9248, r9218, MPFR_RNDN);
        mpfr_set_d(r9250, R, MPFR_RNDN);
        mpfr_mul(r9251, r9249, r9250, MPFR_RNDN);
        return mpfr_get_d(r9251, MPFR_RNDN);
}

static mpfr_t r9252, r9253, r9254, r9255, r9256, r9257, r9258, r9259, r9260, r9261, r9262, r9263, r9264, r9265, r9266, r9267, r9268, r9269, r9270, r9271, r9272, r9273, r9274, r9275, r9276, r9277, r9278, r9279, r9280, r9281, r9282, r9283, r9284, r9285, r9286, r9287, r9288;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r9252);
        mpfr_init(r9253);
        mpfr_init(r9254);
        mpfr_init_set_str(r9255, "2", 10, MPFR_RNDN);
        mpfr_init(r9256);
        mpfr_init(r9257);
        mpfr_init(r9258);
        mpfr_init(r9259);
        mpfr_init(r9260);
        mpfr_init(r9261);
        mpfr_init(r9262);
        mpfr_init(r9263);
        mpfr_init(r9264);
        mpfr_init(r9265);
        mpfr_init(r9266);
        mpfr_init(r9267);
        mpfr_init(r9268);
        mpfr_init(r9269);
        mpfr_init(r9270);
        mpfr_init_set_str(r9271, "1", 10, MPFR_RNDN);
        mpfr_init(r9272);
        mpfr_init(r9273);
        mpfr_init(r9274);
        mpfr_init(r9275);
        mpfr_init(r9276);
        mpfr_init(r9277);
        mpfr_init(r9278);
        mpfr_init(r9279);
        mpfr_init(r9280);
        mpfr_init(r9281);
        mpfr_init(r9282);
        mpfr_init(r9283);
        mpfr_init(r9284);
        mpfr_init(r9285);
        mpfr_init(r9286);
        mpfr_init(r9287);
        mpfr_init(r9288);
}

double f_dm(double R, double lambda1, double lambda2, double phi1, double phi2) {
        mpfr_set_d(r9252, lambda1, MPFR_RNDN);
        mpfr_set_d(r9253, lambda2, MPFR_RNDN);
        mpfr_sub(r9254, r9252, r9253, MPFR_RNDN);
        ;
        mpfr_div(r9256, r9254, r9255, MPFR_RNDN);
        mpfr_sin(r9257, r9256, MPFR_RNDN);
        mpfr_set_d(r9258, phi2, MPFR_RNDN);
        mpfr_cos(r9259, r9258, MPFR_RNDN);
        mpfr_set_d(r9260, phi1, MPFR_RNDN);
        mpfr_cos(r9261, r9260, MPFR_RNDN);
        mpfr_mul(r9262, r9259, r9261, MPFR_RNDN);
        mpfr_mul(r9263, r9262, r9257, MPFR_RNDN);
        mpfr_mul(r9264, r9257, r9263, MPFR_RNDN);
        mpfr_sub(r9265, r9260, r9258, MPFR_RNDN);
        mpfr_div(r9266, r9265, r9255, MPFR_RNDN);
        mpfr_sin(r9267, r9266, MPFR_RNDN);
        mpfr_pow(r9268, r9267, r9255, MPFR_RNDN);
        mpfr_add(r9269, r9264, r9268, MPFR_RNDN);
        mpfr_sqrt(r9270, r9269, MPFR_RNDN);
        ;
        mpfr_div(r9272, r9258, r9255, MPFR_RNDN);
        mpfr_cos(r9273, r9272, MPFR_RNDN);
        mpfr_div(r9274, r9260, r9255, MPFR_RNDN);
        mpfr_sin(r9275, r9274, MPFR_RNDN);
        mpfr_mul(r9276, r9273, r9275, MPFR_RNDN);
        mpfr_sin(r9277, r9272, MPFR_RNDN);
        mpfr_cos(r9278, r9274, MPFR_RNDN);
        mpfr_mul(r9279, r9277, r9278, MPFR_RNDN);
        mpfr_sub(r9280, r9276, r9279, MPFR_RNDN);
        mpfr_pow(r9281, r9280, r9255, MPFR_RNDN);
        mpfr_add(r9282, r9281, r9264, MPFR_RNDN);
        mpfr_sub(r9283, r9271, r9282, MPFR_RNDN);
        mpfr_sqrt(r9284, r9283, MPFR_RNDN);
        mpfr_atan2(r9285, r9270, r9284, MPFR_RNDN);
        mpfr_mul(r9286, r9285, r9255, MPFR_RNDN);
        mpfr_set_d(r9287, R, MPFR_RNDN);
        mpfr_mul(r9288, r9286, r9287, MPFR_RNDN);
        return mpfr_get_d(r9288, MPFR_RNDN);
}

