Files
MentOS/libc/inc/math.h
T
Enrico Fraccaroli (Galfurian) 30e01ba560 Update version
2024-01-17 13:49:48 +01:00

161 lines
5.1 KiB
C

/// @file math.h
/// @brief Mathematical constants and functions.
/// @copyright (c) 2014-2024 This file is distributed under the MIT License.
/// See LICENSE.md for details.
#pragma once
/// @brief The absolute value.
#define abs(a) (((a) < 0) ? -(a) : (a))
/// @brief The max of the two values.
#define max(a, b) (((a) > (b)) ? (a) : (b))
/// @brief The min of the two values.
#define min(a, b) (((a) < (b)) ? (a) : (b))
/// @brief The sign the the passed value.
#define sign(x) ((x < 0) ? -1 : ((x > 0) ? 1 : 0))
/// @brief Returns a rounded up, away from zero, to the nearest multiple of b.
#define round_up(number, base) (((number) + (base)-1) & ~((base)-1))
/// @brief e
#define M_E 2.7182818284590452354
/// @brief log_2 e
#define M_LOG2E 1.4426950408889634074
/// @brief log_10 e
#define M_LOG10E 0.43429448190325182765
/// @brief log_e 2
#define M_LN2 0.69314718055994530942
/// @brief log_e 10
#define M_LN10 2.30258509299404568402
/// @brief pi
#define M_PI 3.14159265358979323846
/// @brief pi / 2
#define M_PI_2 1.57079632679489661923
/// @brief pi / 4
#define M_PI_4 0.78539816339744830962
/// @brief 1 / pi
#define M_1_PI 0.31830988618379067154
/// @brief 2 / pi
#define M_2_PI 0.63661977236758134308
/// @brief 2 / sqrt(pi)
#define M_2_SQRTPI 1.12837916709551257390
/// @brief sqrt(2)
#define M_SQRT2 1.41421356237309504880
/// @brief 1 / sqrt(2)
#define M_SQRT1_2 0.70710678118654752440
/// @brief Returns the integral value that is nearest to x, with
/// halfway cases rounded away from zero.
/// @param x Value to round.
/// @result The value of x rounded to the nearest integral
/// (as a floating-point value).
double round(double x);
/// @brief Rounds x upward, returning the smallest integral value
/// that is not less than x.
/// @param x Value to round up.
/// @return The smallest integral value that is not less than x
/// (as a floating-point value).
double ceil(double x);
/// @brief Rounds x downward, returning the largest integral value
/// that is not greater than x.
/// @param x Value to round down.
/// @return The value of x rounded downward (as a floating-point value).
double floor(double x);
/// @brief Returns base raised to the power exponent:
/// @param base Base value.
/// @param exponent Exponent value.
/// @result The result of raising base to the power exponent.
/// @details
/// If the base is finite negative and the exponent is finite but not an
/// integer value, it causes a domain error.
/// If both base and exponent are zero, it may also cause a domain error
/// on certain implementations.
/// If base is zero and exponent is negative, it may cause a domain error
/// or a pole error (or none, depending on the library implementation).
/// The function may also cause a range error if the result is too great
/// or too small to be represented by a value of the return type.
double pow(double base, double exponent);
/// @brief Returns the base-e exponential function of x, which is e raised
/// to the power x: e^x.
/// @param x Value of the exponent.
/// @return Exponential value of x.
/// @details
/// If the magnitude of the result is too large to be represented by a value
/// of the return type, the function returns HUGE_VAL (or HUGE_VALF or
/// HUGE_VALL) with the proper sign, and an overflow range error occurs and
/// the global variable errno is set to ERANGE.
double exp(double x);
/// @brief Returns the absolute value of x: |x|.
/// @param x Value whose absolute value is returned.
/// @result The absolute value of x.
double fabs(double x);
/// @brief Returns the absolute value of x: |x|.
/// @param x Value whose absolute value is returned.
/// @result The absolute value of x.
float fabsf(float x);
/// @brief Returns the square root of x.
/// @param x Value whose square root is computed.
/// @return Square root of x. If x is negative, the global variable errno
/// is set to EDOM.
double sqrt(double x);
/// @brief Returns the square root of x.
/// @param x Value whose square root is computed.
/// @return Square root of x. If x is negative, the global variable errno
/// is set to EDOM.
float sqrtf(float x);
/// @brief Checks if the input value is Infinite (INF).
/// @param x The value to check.
/// @return 1 if INF, 0 otherwise.
int isinf(double x);
/// @brief Checks if the input value is Not A Number (NAN).
/// @param x The value to check.
/// @return 1 if NAN, 0 otherwise.
int isnan(double x);
/// @brief Logarithm function in base 10.
/// @param x Topic of the logarithm function.
/// @return Return the result.
double log10(double x);
/// @brief Natural logarithm function.
/// @param x Topic of the logarithm function.
/// @return Return the result.
double ln(double x);
/// @brief Logarithm function in base x.
/// @param x Base of the logarithm.
/// @param y Topic of the logarithm function.
/// @return Return the result.
double logx(double x, double y);
/// @brief Breaks x into an integral and a fractional part, both parts have the same sign as x.
/// @param x The value we want to break.
/// @param intpart Where we store the integer part.
/// @return the fractional part.
double modf(double x, double *intpart);