30 #if MICROPY_PY_BUILTINS_FLOAT && MICROPY_PY_MATH 36 #define MP_PI MICROPY_FLOAT_CONST(3.14159265358979323846) 43 mp_float_t x = mp_obj_get_float(x_obj);
44 mp_float_t ans = f(x);
48 return mp_obj_new_float(ans);
52 mp_float_t x = mp_obj_get_float(x_obj);
53 mp_float_t y = mp_obj_get_float(y_obj);
54 mp_float_t ans = f(x, y);
58 return mp_obj_new_float(ans);
61 #define MATH_FUN_1(py_name, c_name) \ 62 STATIC mp_obj_t mp_math_ ## py_name(mp_obj_t x_obj) { \ 63 return math_generic_1(x_obj, MICROPY_FLOAT_C_FUN(c_name)); \ 65 STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_math_## py_name ## _obj, mp_math_ ## py_name); 67 #define MATH_FUN_1_TO_BOOL(py_name, c_name) \ 68 STATIC mp_obj_t mp_math_ ## py_name(mp_obj_t x_obj) { return mp_obj_new_bool(c_name(mp_obj_get_float(x_obj))); } \ 69 STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_math_## py_name ## _obj, mp_math_ ## py_name); 71 #define MATH_FUN_1_TO_INT(py_name, c_name) \ 72 STATIC mp_obj_t mp_math_ ## py_name(mp_obj_t x_obj) { return mp_obj_new_int_from_float(MICROPY_FLOAT_C_FUN(c_name)(mp_obj_get_float(x_obj))); } \ 73 STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_math_## py_name ## _obj, mp_math_ ## py_name); 75 #define MATH_FUN_2(py_name, c_name) \ 76 STATIC mp_obj_t mp_math_ ## py_name(mp_obj_t x_obj, mp_obj_t y_obj) { \ 77 return math_generic_2(x_obj, y_obj, MICROPY_FLOAT_C_FUN(c_name)); \ 79 STATIC MP_DEFINE_CONST_FUN_OBJ_2(mp_math_## py_name ## _obj, mp_math_ ## py_name); 81 #define MATH_FUN_2_FLT_INT(py_name, c_name) \ 82 STATIC mp_obj_t mp_math_ ## py_name(mp_obj_t x_obj, mp_obj_t y_obj) { \ 83 return mp_obj_new_float(MICROPY_FLOAT_C_FUN(c_name)(mp_obj_get_float(x_obj), mp_obj_get_int(y_obj))); \ 85 STATIC MP_DEFINE_CONST_FUN_OBJ_2(mp_math_## py_name ## _obj, mp_math_ ## py_name); 91 mp_float_t MICROPY_FLOAT_C_FUN(
log2)(mp_float_t x) {
92 return MICROPY_FLOAT_C_FUN(
log)(x) * MICROPY_FLOAT_CONST(1.442695040888963407354163704);
102 #if MICROPY_PY_MATH_SPECIAL_FUNCTIONS 139 STATIC mp_float_t MICROPY_FLOAT_C_FUN(copysign_func)(mp_float_t x, mp_float_t y) {
140 return MICROPY_FLOAT_C_FUN(
copysign)(x, y);
144 STATIC mp_float_t MICROPY_FLOAT_C_FUN(fabs_func)(mp_float_t x) {
145 return MICROPY_FLOAT_C_FUN(
fabs)(x);
147 MATH_FUN_1(
fabs, fabs_func)
162 #if MICROPY_PY_MATH_SPECIAL_FUNCTIONS 178 mp_float_t x = mp_obj_get_float(
args[0]);
179 if (x <= (mp_float_t)0.0) {
182 mp_float_t l = MICROPY_FLOAT_C_FUN(
log)(x);
184 return mp_obj_new_float(l);
186 mp_float_t base = mp_obj_get_float(
args[1]);
187 if (base <= (mp_float_t)0.0) {
189 }
else if (base == (mp_float_t)1.0) {
192 return mp_obj_new_float(l / MICROPY_FLOAT_C_FUN(
log)(base));
201 int int_exponent = 0;
202 mp_float_t significand = MICROPY_FLOAT_C_FUN(
frexp)(mp_obj_get_float(x_obj), &int_exponent);
204 tuple[0] = mp_obj_new_float(significand);
212 mp_float_t int_part = 0.0;
213 mp_float_t fractional_part = MICROPY_FLOAT_C_FUN(
modf)(mp_obj_get_float(x_obj), &int_part);
215 tuple[0] = mp_obj_new_float(fractional_part);
216 tuple[1] = mp_obj_new_float(int_part);
225 return mp_obj_new_float(mp_obj_get_float(x_obj) * (MP_PI / MICROPY_FLOAT_CONST(180.0)));
231 return mp_obj_new_float(mp_obj_get_float(x_obj) * (MICROPY_FLOAT_CONST(180.0) / MP_PI));
242 #if MICROPY_PY_MATH_SPECIAL_FUNCTIONS 246 #if MICROPY_PY_MATH_SPECIAL_FUNCTIONS 277 #if MICROPY_PY_MATH_SPECIAL_FUNCTIONS 292 #endif // MICROPY_PY_BUILTINS_FLOAT && MICROPY_PY_MATH
NORETURN void mp_raise_msg(const mp_obj_type_t *exc_type, const char *msg)
mp_obj_t mp_obj_new_tuple(size_t n, const mp_obj_t *items)
#define MP_DEFINE_CONST_DICT(dict_name, table_name)
const mp_obj_type_t mp_type_ZeroDivisionError
#define MP_DEFINE_CONST_FUN_OBJ_1(obj_name, fun_name)
double frexp(double x, int *eptr)
mp_obj_t mp_obj_new_int(mp_int_t value)
#define MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(obj_name, n_args_min, n_args_max, fun_name)
NORETURN void mp_raise_ValueError(const char *msg)
const mp_obj_type_t mp_type_module
const mp_obj_module_t mp_module_math
double modf(double value, double *iptr)