/*

CLASS {NATIVE_Mathematics|_Gcc}, NATIVE, TESTED :


// {Mathematics} native functions code:

CONST STR :
NATIVE_Mathematics_import = @
    "#include <cmath>"
    "#include <limits>"

NATIVE_Power = @
"    RESULT = pow(X_B, X_Exp);"

NATIVE_Sqrt = @
"    try {"
"        RESULT = sqrt(X_X);"
"    }"
"    catch (std::exception& E) {"
"        AL4_system::Any_exception(E);"
"        RESULT = std::numeric_limits<double>::quiet_NaN();"
"    }"

NATIVE_Is_NAN = @
"    RESULT = X_V != X_V;" 

NATIVE_Is_INF = @
"    RESULT = std::numeric_limits<double>::has_infinity &&"
"       (X_V == std::numeric_limits<double>::infinity() ||"
"        X_V == -std::numeric_limits<double>::infinity());"

NATIVE_Abs = @
"    RESULT = fabs(X_X);" 

NATIVE_Round = @
"   RESULT = floor(X_X + 0.5);"

NATIVE_Trunc = @
"	RESULT = int(X_X);"
//"	RESULT = std::trunc(X_X);"

NATIVE_Log10 = @
"    try {"
"        RESULT = log10(X_X);"
"    }"
"    catch (std::exception& E) {"
"        AL4_system::Any_exception(E);"
"        RESULT = std::numeric_limits<double>::quiet_NaN();"
"    }"

NATIVE_Ln = @
"    try {"
"        RESULT = log(X_X);"
"    }"
"    catch (std::exception& E) {"
"        AL4_system::Any_exception(E);"
"        RESULT = std::numeric_limits<double>::quiet_NaN();"
"    }"

NATIVE_Base_log = @
"    try {"
"        RESULT = log(X_X) / log(X_Base);"
"    }"
"    catch (std::exception& E) {"
"        AL4_system::Any_exception(E);"
"        RESULT = std::numeric_limits<double>::quiet_NaN();"
"    }"

NATIVE_PI = @
"    RESULT = 3.1415926535897932384626433832795;"

NATIVE_Sin = @
"    try {"
"        RESULT = sin(X_X);"
"    }"
"    catch (std::exception& E) {"
"        AL4_system::Any_exception(E);"
"        RESULT = std::numeric_limits<double>::quiet_NaN();"
"    }"

NATIVE_Cos = @
"    try {"
"        RESULT = cos(X_X);"
"    }"
"    catch (std::exception& E) {"
"        AL4_system::Any_exception(E);"
"        RESULT = std::numeric_limits<double>::quiet_NaN();"
"    }"

NATIVE_Tan = @
"    try {"
"        RESULT = tan(X_X);"
"    }"
"    catch (std::exception& E) {"
"        AL4_system::Any_exception(E);"
"        RESULT = std::numeric_limits<double>::quiet_NaN();"
"    }"

NATIVE_Cotan = @
"    try {"
"        RESULT = 1.0 / tan(X_X);"
"    }"
"    catch (std::exception& E) {"
"        AL4_system::Any_exception(E);"
"        RESULT = std::numeric_limits<double>::quiet_NaN();"
"    }"

NATIVE_Arcsin = @
"    try {"
"        RESULT = asin(X_X);"
"    }"
"    catch (std::exception& E) {"
"        AL4_system::Any_exception(E);"
"        RESULT = std::numeric_limits<double>::quiet_NaN();"
"    }"

NATIVE_Arccos = @
"    try {"
"        RESULT = acos(X_X);"
"    }"
"    catch (std::exception& E) {"
"        AL4_system::Any_exception(E);"
"        RESULT = std::numeric_limits<double>::quiet_NaN();"
"    }"

NATIVE_Arctan = @
"    try {"
"        RESULT = atan(X_X);"
"    }"
"    catch (std::exception& E) {"
"        AL4_system::Any_exception(E);"
"        RESULT = std::numeric_limits<double>::quiet_NaN();"
"    }"

NATIVE_Arctan2 = @
"    try {"
"        RESULT = atan2(X_Y, X_X);"
"    }"
"    catch (std::exception& E) {"
"        AL4_system::Any_exception(E);"
"        RESULT = std::numeric_limits<double>::quiet_NaN();"
"    }"

NATIVE_Exp = @
"    try {"
"        RESULT = exp(X_X);"
"    }"
"    catch (std::exception& E) {"
"        AL4_system::Any_exception(E);"
"        RESULT = std::numeric_limits<double>::quiet_NaN();"
"    }"

NATIVE_Sinh = @
"    try {"
"        RESULT = sinh(X_X);"
"    }"
"    catch (std::exception& E) {"
"        AL4_system::Any_exception(E);"
"        RESULT = std::numeric_limits<double>::quiet_NaN();"
"    }"

NATIVE_Cosh = @
"    try {"
"        RESULT = cosh(X_X);"
"    }"
"    catch (std::exception& E) {"
"        AL4_system::Any_exception(E);"
"        RESULT = std::numeric_limits<double>::quiet_NaN();"
"    }"

NATIVE_Tanh = @
"    try {"
"        RESULT = tanh(X_X);"
"    }"
"    catch (std::exception& E) {"
"        AL4_system::Any_exception(E);"
"        RESULT = std::numeric_limits<double>::quiet_NaN();"
"    }"

NATIVE_Coth = @
"    try {"
"        RESULT = 1.0 / tanh(X_X);"
"    }"
"    catch (std::exception& E) {"
"        AL4_system::Any_exception(E);"
"        RESULT = std::numeric_limits<double>::quiet_NaN();"
"    }"

NATIVE_Arcsinh = @
"    try {"
"        RESULT = log(X_X + sqrt(X_X * X_X + 1));"
"    }"
"    catch (std::exception& E) {"
"        AL4_system::Any_exception(E);"
"        RESULT = std::numeric_limits<double>::quiet_NaN();"
"    }"

NATIVE_Arccosh = @
"    try {"
"        RESULT = log(X_X + sqrt(X_X * X_X - 1));"
"    }"
"    catch (std::exception& E) {"
"        AL4_system::Any_exception(E);"
"        RESULT = std::numeric_limits<double>::quiet_NaN();"
"    }"

NATIVE_Arctanh = @
"    try {"
"        RESULT = 0.5 * log((1 + X_X) / (1 - X_X));"
"    }"
"    catch (std::exception& E) {"
"        AL4_system::Any_exception(E);"
"        RESULT = std::numeric_limits<double>::quiet_NaN();"
"    }"

.

END
*/

