smath.h
来自「这是整套横扫千军3D版游戏的源码」· C头文件 代码 · 共 702 行 · 第 1/3 页
H
702 行
/*
streflop: STandalone REproducible FLOating-Point
Nicolas Brodu, 2006
Code released according to the GNU Lesser General Public License
Heavily relies on GNU Libm, itself depending on netlib fplibm, GNU MP, and IBM MP lib.
Uses SoftFloat too.
Please read the history and copyright information in the documentation provided with the source code
*/
// Included by the main streflop include file
// module broken apart for logical code separation
#ifndef STREFLOP_MATH_H
#define STREFLOP_MATH_H
// just in case, should already be included
#include "streflop.h"
// Names from the libm conversion
namespace streflop_libm {
using streflop::Simple;
using streflop::Double;
#ifdef Extended
using streflop::Extended;
#endif
extern Simple __ieee754_sqrtf(Simple x);
extern Simple __cbrtf(Simple x);
extern Simple __ieee754_hypotf(Simple x, Simple y);
extern Simple __ieee754_expf(Simple x);
extern Simple __ieee754_logf(Simple x);
extern Simple __ieee754_log2f(Simple x);
extern Simple __ieee754_exp2f(Simple x);
extern Simple __ieee754_log10f(Simple x);
extern Simple __ieee754_powf(Simple x, Simple y);
extern Simple __sinf(Simple x);
extern Simple __cosf(Simple x);
extern Simple __tanhf(Simple x);
extern Simple __tanf(Simple x);
extern Simple __ieee754_acosf(Simple x);
extern Simple __ieee754_asinf(Simple x);
extern Simple __atanf(Simple x);
extern Simple __ieee754_atan2f(Simple x, Simple y);
extern Simple __ieee754_coshf(Simple x);
extern Simple __ieee754_sinhf(Simple x);
extern Simple __ieee754_acoshf(Simple x);
extern Simple __asinhf(Simple x);
extern Simple __ieee754_atanhf(Simple x);
extern Simple __fabsf(Simple x);
extern Simple __floorf(Simple x);
extern Simple __ceilf(Simple x);
extern Simple __truncf(Simple x);
extern Simple __ieee754_fmodf(Simple x, Simple y);
extern Simple __ieee754_remainderf(Simple x, Simple y);
extern Simple __remquof(Simple x, Simple y, int *quo);
extern Simple __rintf(Simple x);
extern long int __lrintf(Simple x);
extern long long int __llrintf(Simple x);
extern Simple __roundf(Simple x);
extern long int __lroundf(Simple x);
extern long long int __llroundf(Simple x);
extern Simple __nearbyintf(Simple x);
extern Simple __frexpf(Simple x, int *exp);
extern Simple __ldexpf(Simple value, int exp);
extern Simple __logbf(Simple x);
extern int __ilogbf(Simple x);
extern Simple __copysignf(Simple x);
extern int __signbitf(Simple x);
extern Simple __nextafterf(Simple x, Simple y);
extern Simple __expm1f(Simple x);
extern Simple __log1pf(Simple x);
extern Simple __erff(Simple x);
extern Simple __ieee754_j0f(Simple x);
extern Simple __ieee754_j1f(Simple x);
extern Simple __ieee754_jnf(int n, Simple x);
extern Simple __ieee754_y0f(Simple x);
extern Simple __ieee754_y1f(Simple x);
extern Simple __ieee754_ynf(int n, Simple x);
extern Simple __scalbnf(Simple x, int n);
extern Simple __scalblnf(Simple x, long int n);
extern int __fpclassifyf(Simple x);
extern int __isnanf(Simple x);
extern int __isinff(Simple x);
extern Double __ieee754_sqrt(Double x);
extern Double __cbrt(Double x);
extern Double __ieee754_hypot(Double x, Double y);
extern Double __ieee754_exp(Double x);
extern Double __ieee754_log(Double x);
extern Double __ieee754_log2(Double x);
extern Double __ieee754_exp2(Double x);
extern Double __ieee754_log10(Double x);
extern Double __ieee754_pow(Double x, Double y);
extern Double __sin(Double x);
extern Double __cos(Double x);
extern Double tan(Double x);
extern Double __ieee754_acos(Double x);
extern Double __ieee754_asin(Double x);
extern Double atan(Double x);
extern Double __ieee754_atan2(Double x, Double y);
extern Double __ieee754_cosh(Double x);
extern Double __ieee754_sinh(Double x);
extern Double __tanh(Double x);
extern Double __ieee754_acosh(Double x);
extern Double __asinh(Double x);
extern Double __ieee754_atanh(Double x);
extern Double __fabs(Double x);
extern Double __floor(Double x);
extern Double __ceil(Double x);
extern Double __trunc(Double x);
extern Double __ieee754_fmod(Double x, Double y);
extern Double __ieee754_remainder(Double x, Double y);
extern Double __remquo(Double x, Double y, int *quo);
extern Double __rint(Double x);
extern long int __lrint(Double x);
extern long long int __llrint(Double x);
extern Double __round(Double x);
extern long int __lround(Double x);
extern long long int __llround(Double x);
extern Double __nearbyint(Double x);
extern Double __frexp(Double x, int *exp);
extern Double __ldexp(Double value, int exp);
extern Double __logb(Double x);
extern int __ilogb(Double x);
extern Double __copysign(Double x);
extern int __signbit(Double x);
extern Double __nextafter(Double x, Double y);
extern Double __expm1(Double x);
extern Double __log1p(Double x);
extern Double __erf(Double x);
extern Double __ieee754_j0(Double x);
extern Double __ieee754_j1(Double x);
extern Double __ieee754_jn(int n, Double x);
extern Double __ieee754_y0(Double x);
extern Double __ieee754_y1(Double x);
extern Double __ieee754_yn(int n, Double x);
extern Double __scalbn(Double x, int n);
extern Double __scalbln(Double x, long int n);
extern int __fpclassify(Double x);
extern int __isnanl(Double x);
extern int __isinf(Double x);
#ifdef Extended
extern Extended __ieee754_sqrtl(Extended x);
extern Extended __cbrtl(Extended x);
extern Extended __ieee754_hypotl(Extended x, Extended y);
extern Extended __ieee754_expl(Extended x);
extern Extended __ieee754_logl(Extended x);
extern Extended __sinl(Extended x);
extern Extended __cosl(Extended x);
extern Extended __tanl(Extended x);
extern Extended __ieee754_asinl(Extended x);
extern Extended __atanl(Extended x);
extern Extended __ieee754_atan2l(Extended x, Extended y);
extern Extended __ieee754_coshl(Extended x);
extern Extended __ieee754_sinhl(Extended x);
extern Extended __tanhl(Extended x);
extern Extended __ieee754_acoshl(Extended x);
extern Extended __asinhl(Extended x);
extern Extended __ieee754_atanhl(Extended x);
extern Extended __fabsl(Extended x);
extern Extended __floorl(Extended x);
extern Extended __ceill(Extended x);
extern Extended __truncl(Extended x);
extern Extended __ieee754_fmodl(Extended x, Extended y);
extern Extended __ieee754_remainderl(Extended x, Extended y);
extern Extended __remquol(Extended x, Extended y, int *quo);
extern Extended __rintl(Extended x);
extern long int __lrintl(Extended x);
extern long long int __llrintl(Extended x);
extern Extended __roundl(Extended x);
extern long int __lroundl(Extended x);
extern long long int __llroundl(Extended x);
extern Extended __nearbyintl(Extended x);
extern Extended __frexpl(Extended x, int *exp);
extern Extended __ldexpl(Extended value, int exp);
extern Extended __logbl(Extended x);
extern int __ilogbl(Extended x);
extern Extended __copysignl(Extended x);
extern int __signbitl(Extended x);
extern Extended __nextafterl(Extended x, Extended y);
extern Extended __expm1l(Extended x);
extern Extended __log1pl(Extended x);
extern Extended __erfl(Extended x);
extern Extended __ieee754_j0l(Extended x);
extern Extended __ieee754_j1l(Extended x);
extern Extended __ieee754_jnl(int n, Extended x);
extern Extended __ieee754_y0l(Extended x);
extern Extended __ieee754_y1l(Extended x);
extern Extended __ieee754_ynl(int n, Extended x);
extern Extended __scalbnl(Extended x, int n);
extern Extended __scalblnl(Extended x, long int n);
extern int __fpclassifyl(Extended x);
extern int __isnanl(Extended x);
extern int __isinfl(Extended x);
#endif
}
// Wrappers in our own namespace
namespace streflop {
// Stolen from math.h. All floating-point numbers can be put in one of these categories.
enum
{
STREFLOP_FP_NAN = 0,
STREFLOP_FP_INFINITE = 1,
STREFLOP_FP_ZERO = 2,
STREFLOP_FP_SUBNORMAL = 3,
STREFLOP_FP_NORMAL = 4
};
// Simple and double are present in all configurations
inline Simple sqrt(Simple x) {return streflop_libm::__ieee754_sqrtf(x);}
inline Simple cbrt(Simple x) {return streflop_libm::__cbrtf(x);}
inline Simple hypot(Simple x, Simple y) {return streflop_libm::__ieee754_hypotf(x,y);}
inline Simple exp(Simple x) {return streflop_libm::__ieee754_expf(x);}
inline Simple log(Simple x) {return streflop_libm::__ieee754_logf(x);}
inline Simple log2(Simple x) {return streflop_libm::__ieee754_log2f(x);}
inline Simple exp2(Simple x) {return streflop_libm::__ieee754_exp2f(x);}
inline Simple log10(Simple x) {return streflop_libm::__ieee754_log10f(x);}
inline Simple pow(Simple x, Simple y) {return streflop_libm::__ieee754_powf(x,y);}
inline Simple sin(Simple x) {return streflop_libm::__sinf(x);}
inline Simple cos(Simple x) {return streflop_libm::__cosf(x);}
inline Simple tan(Simple x) {return streflop_libm::__tanf(x);}
inline Simple acos(Simple x) {return streflop_libm::__ieee754_acosf(x);}
inline Simple asin(Simple x) {return streflop_libm::__ieee754_asinf(x);}
inline Simple atan(Simple x) {return streflop_libm::__atanf(x);}
inline Simple atan2(Simple x, Simple y) {return streflop_libm::__ieee754_atan2f(x,y);}
inline Simple cosh(Simple x) {return streflop_libm::__ieee754_coshf(x);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?