Commit 561844f3 authored by Damien George's avatar Damien George

py: Add MICROPY_FLOAT_CONST macro for defining float constants.

All float constants in the core should use this macro to prevent
unnecessary creation of double-precision floats, which makes code less
efficient.
parent ca973bd3
...@@ -32,9 +32,8 @@ ...@@ -32,9 +32,8 @@
#include <math.h> #include <math.h>
// M_PI is not part of the math.h standard and may not be defined // M_PI is not part of the math.h standard and may not be defined
#ifndef M_PI // And by defining our own we can ensure it uses the correct const format.
#define M_PI (3.14159265358979323846) #define MP_PI MICROPY_FLOAT_CONST(3.14159265358979323846)
#endif
/// \module math - mathematical functions /// \module math - mathematical functions
/// ///
...@@ -204,13 +203,13 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_math_modf_obj, mp_math_modf); ...@@ -204,13 +203,13 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_math_modf_obj, mp_math_modf);
/// \function radians(x) /// \function radians(x)
STATIC mp_obj_t mp_math_radians(mp_obj_t x_obj) { STATIC mp_obj_t mp_math_radians(mp_obj_t x_obj) {
return mp_obj_new_float(mp_obj_get_float(x_obj) * M_PI / 180.0); return mp_obj_new_float(mp_obj_get_float(x_obj) * (MP_PI / MICROPY_FLOAT_CONST(180.0)));
} }
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_math_radians_obj, mp_math_radians); STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_math_radians_obj, mp_math_radians);
/// \function degrees(x) /// \function degrees(x)
STATIC mp_obj_t mp_math_degrees(mp_obj_t x_obj) { STATIC mp_obj_t mp_math_degrees(mp_obj_t x_obj) {
return mp_obj_new_float(mp_obj_get_float(x_obj) * 180.0 / M_PI); return mp_obj_new_float(mp_obj_get_float(x_obj) * (MICROPY_FLOAT_CONST(180.0) / MP_PI));
} }
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_math_degrees_obj, mp_math_degrees); STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_math_degrees_obj, mp_math_degrees);
......
...@@ -505,10 +505,12 @@ typedef long long mp_longint_impl_t; ...@@ -505,10 +505,12 @@ typedef long long mp_longint_impl_t;
#if MICROPY_FLOAT_IMPL == MICROPY_FLOAT_IMPL_FLOAT #if MICROPY_FLOAT_IMPL == MICROPY_FLOAT_IMPL_FLOAT
#define MICROPY_PY_BUILTINS_FLOAT (1) #define MICROPY_PY_BUILTINS_FLOAT (1)
#define MICROPY_FLOAT_CONST(x) x##F
#define MICROPY_FLOAT_C_FUN(fun) fun##f #define MICROPY_FLOAT_C_FUN(fun) fun##f
typedef float mp_float_t; typedef float mp_float_t;
#elif MICROPY_FLOAT_IMPL == MICROPY_FLOAT_IMPL_DOUBLE #elif MICROPY_FLOAT_IMPL == MICROPY_FLOAT_IMPL_DOUBLE
#define MICROPY_PY_BUILTINS_FLOAT (1) #define MICROPY_PY_BUILTINS_FLOAT (1)
#define MICROPY_FLOAT_CONST(x) x
#define MICROPY_FLOAT_C_FUN(fun) fun #define MICROPY_FLOAT_C_FUN(fun) fun
typedef double mp_float_t; typedef double mp_float_t;
#else #else
......
...@@ -227,7 +227,7 @@ mp_obj_t mp_parse_num_decimal(const char *str, size_t len, bool allow_imag, bool ...@@ -227,7 +227,7 @@ mp_obj_t mp_parse_num_decimal(const char *str, size_t len, bool allow_imag, bool
} else { } else {
if (in == PARSE_DEC_IN_FRAC) { if (in == PARSE_DEC_IN_FRAC) {
dec_val += dig * frac_mult; dec_val += dig * frac_mult;
frac_mult *= 0.1; frac_mult *= MICROPY_FLOAT_CONST(0.1);
} else { } else {
dec_val = 10 * dec_val + dig; dec_val = 10 * dec_val + dig;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment