12 if (out_sin == NULL || out_cos == NULL || out_sin == out_cos || !isfinite(x)) {
17 if (!isfinite(sine) || !isfinite(cosine)) {
27 if (out_res == NULL || !isfinite(x) || !isfinite(y)) {
31 if (!isfinite(result)) {
40 if (out_res == NULL || !isfinite(x)) {
44 if (!isfinite(result)) {
53 if (out_res == NULL || !isfinite(x)) {
60 if (!isfinite(result)) {
69 if (out_res == NULL || !isfinite(x)) {
73 if (!isfinite(result)) {
82 if (out_res == NULL || !isfinite(x)) {
89 if (!isfinite(result)) {
97 if (out_iptr == NULL || out_frac == NULL || out_iptr == out_frac) {
102 double fr = modf(x, &ip);
111 if (out_res == NULL || isnan(x) || isnan(y)) {
123 if (out_res == NULL || !isfinite(x)) {
126 result = ldexp(x, exp);
127 if (!isfinite(result) || (x != 0.0 && result == 0.0)) {
149 return store_finite_scalar_result(asin(x), out);
155 return store_finite_scalar_result(acos(x), out);
160 return store_finite_scalar_result(atan(x), out);
165 return store_finite_scalar_result(sinh(x), out);
170 return store_finite_scalar_result(cosh(x), out);
175 return store_finite_scalar_result(tanh(x), out);
180 return store_finite_scalar_result(asinh(x), out);
186 return store_finite_scalar_result(acosh(x), out);
192 return store_finite_scalar_result(atanh(x), out);
197 if ((x == 0.0 && y < 0.0) ||
198 (x < 0.0 && trunc(y) != y)) {
201 return store_finite_scalar_result(pow(x, y), out);
206 return store_finite_scalar_result(ceil(x), out);
211 return store_finite_scalar_result(floor(x), out);
216 return store_finite_scalar_result(round(x), out);
221 return store_finite_scalar_result(trunc(x), out);
double lmmc_real_t
Public and internal LMMC real type.
#define LMMC_REAL_SET_D(dst, dbl)
将一个 double 字面量赋值到 lmmc_real_t 。
lmmc_status_t lmmc_expm1(lmmc_real_t x, lmmc_real_t *out_res)
计算 ,对小 x 更精确.
lmmc_status_t lmmc_asin(lmmc_real_t x, lmmc_real_t *out)
实标量函数的公共状态约定。
lmmc_status_t lmmc_cosh(lmmc_real_t x, lmmc_real_t *out)
计算双曲余弦 .
lmmc_status_t lmmc_log1p(lmmc_real_t x, lmmc_real_t *out_res)
计算 ,对小 x 更精确.
lmmc_status_t lmmc_atan2(lmmc_real_t y, lmmc_real_t x, lmmc_real_t *out_res)
计算 .
lmmc_status_t lmmc_sinh(lmmc_real_t x, lmmc_real_t *out)
计算双曲正弦 .
lmmc_status_t lmmc_fmod(lmmc_real_t x, lmmc_real_t y, lmmc_real_t *out_res)
计算浮点余数,结果符号与 x 相同,幅值小于 y 的幅值.
lmmc_status_t lmmc_ceil(lmmc_real_t x, lmmc_real_t *out)
计算向上取整 .
lmmc_status_t lmmc_hypot(lmmc_real_t x, lmmc_real_t y, lmmc_real_t *out_res)
缩放计算欧氏距离 。
lmmc_status_t lmmc_floor(lmmc_real_t x, lmmc_real_t *out)
计算向下取整 .
lmmc_status_t lmmc_asinh(lmmc_real_t x, lmmc_real_t *out)
计算反双曲正弦 .
lmmc_status_t lmmc_tanh(lmmc_real_t x, lmmc_real_t *out)
计算双曲正切 .
lmmc_status_t lmmc_sincos(lmmc_real_t x, lmmc_real_t *out_sin, lmmc_real_t *out_cos)
计算同一有限弧度值的正弦和余弦.
lmmc_status_t lmmc_nextafter(lmmc_real_t x, lmmc_real_t y, lmmc_real_t *out_res)
计算 x 朝 y 方向的下一个可表示浮点数.
lmmc_status_t lmmc_ldexp(lmmc_real_t x, int exp, lmmc_real_t *out_res)
计算 .
lmmc_status_t lmmc_round(lmmc_real_t x, lmmc_real_t *out)
计算四舍五入 .
lmmc_status_t lmmc_acos(lmmc_real_t x, lmmc_real_t *out)
计算反余弦 .
lmmc_status_t lmmc_exp2(lmmc_real_t x, lmmc_real_t *out_res)
计算 .
lmmc_status_t lmmc_log2(lmmc_real_t x, lmmc_real_t *out_res)
计算 .
lmmc_status_t lmmc_pow(lmmc_real_t x, lmmc_real_t y, lmmc_real_t *out)
计算幂 .
lmmc_status_t lmmc_split_int_frac(lmmc_real_t x, lmmc_real_t *out_iptr, lmmc_real_t *out_frac)
拆分整数部分与小数部分: .
lmmc_status_t lmmc_atanh(lmmc_real_t x, lmmc_real_t *out)
计算反双曲正切 ,要求 .
lmmc_status_t lmmc_atan(lmmc_real_t x, lmmc_real_t *out)
计算反正切 .
lmmc_status_t lmmc_acosh(lmmc_real_t x, lmmc_real_t *out)
计算反双曲余弦 ,要求 .
lmmc_status_t lmmc_trunc(lmmc_real_t x, lmmc_real_t *out)
计算截断取整 (向零方向取整).
lmmc_status_t
LMMC 库统一返回的状态码.
@ LMMC_STATUS_NUMERICAL_FAILURE
@ LMMC_STATUS_INVALID_ARGUMENT
@ LMMC_STATUS_OUT_OF_RANGE