mirror of
https://github.com/micropython/micropython.git
synced 2026-01-06 12:10:13 +01:00
py: Add function to convert long int to float.
This commit is contained in:
2
py/obj.c
2
py/obj.c
@@ -176,6 +176,8 @@ mp_float_t mp_obj_get_float(mp_obj_t arg) {
|
|||||||
return 1;
|
return 1;
|
||||||
} else if (MP_OBJ_IS_SMALL_INT(arg)) {
|
} else if (MP_OBJ_IS_SMALL_INT(arg)) {
|
||||||
return MP_OBJ_SMALL_INT_VALUE(arg);
|
return MP_OBJ_SMALL_INT_VALUE(arg);
|
||||||
|
} else if (MP_OBJ_IS_TYPE(arg, &int_type)) {
|
||||||
|
return mp_obj_int_as_float(arg);
|
||||||
} else if (MP_OBJ_IS_TYPE(arg, &mp_type_float)) {
|
} else if (MP_OBJ_IS_TYPE(arg, &mp_type_float)) {
|
||||||
return mp_obj_float_get(arg);
|
return mp_obj_float_get(arg);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
3
py/obj.h
3
py/obj.h
@@ -330,6 +330,9 @@ void mp_obj_cell_set(mp_obj_t self_in, mp_obj_t obj);
|
|||||||
extern const mp_obj_type_t int_type;
|
extern const mp_obj_type_t int_type;
|
||||||
// For long int, returns value truncated to machine_int_t
|
// For long int, returns value truncated to machine_int_t
|
||||||
machine_int_t mp_obj_int_get(mp_obj_t self_in);
|
machine_int_t mp_obj_int_get(mp_obj_t self_in);
|
||||||
|
#if MICROPY_ENABLE_FLOAT
|
||||||
|
mp_float_t mp_obj_int_as_float(mp_obj_t self_in);
|
||||||
|
#endif
|
||||||
// Will rains exception if value doesn't fit into machine_int_t
|
// Will rains exception if value doesn't fit into machine_int_t
|
||||||
machine_int_t mp_obj_int_get_checked(mp_obj_t self_in);
|
machine_int_t mp_obj_int_get_checked(mp_obj_t self_in);
|
||||||
|
|
||||||
|
|||||||
@@ -101,6 +101,12 @@ machine_int_t mp_obj_int_get_checked(mp_obj_t self_in) {
|
|||||||
return MP_OBJ_SMALL_INT_VALUE(self_in);
|
return MP_OBJ_SMALL_INT_VALUE(self_in);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if MICROPY_ENABLE_FLOAT
|
||||||
|
mp_float_t mp_obj_int_as_float(mp_obj_t self_in) {
|
||||||
|
return MP_OBJ_SMALL_INT_VALUE(self_in);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif // MICROPY_LONGINT_IMPL == MICROPY_LONGINT_IMPL_NONE
|
#endif // MICROPY_LONGINT_IMPL == MICROPY_LONGINT_IMPL_NONE
|
||||||
|
|
||||||
const mp_obj_type_t int_type = {
|
const mp_obj_type_t int_type = {
|
||||||
|
|||||||
@@ -153,9 +153,10 @@ mp_obj_t mp_obj_new_int_from_long_str(const char *s) {
|
|||||||
machine_int_t mp_obj_int_get(mp_obj_t self_in) {
|
machine_int_t mp_obj_int_get(mp_obj_t self_in) {
|
||||||
if (MP_OBJ_IS_SMALL_INT(self_in)) {
|
if (MP_OBJ_IS_SMALL_INT(self_in)) {
|
||||||
return MP_OBJ_SMALL_INT_VALUE(self_in);
|
return MP_OBJ_SMALL_INT_VALUE(self_in);
|
||||||
|
} else {
|
||||||
|
mp_obj_int_t *self = self_in;
|
||||||
|
return self->val;
|
||||||
}
|
}
|
||||||
mp_obj_int_t *self = self_in;
|
|
||||||
return self->val;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
machine_int_t mp_obj_int_get_checked(mp_obj_t self_in) {
|
machine_int_t mp_obj_int_get_checked(mp_obj_t self_in) {
|
||||||
@@ -163,4 +164,15 @@ machine_int_t mp_obj_int_get_checked(mp_obj_t self_in) {
|
|||||||
return mp_obj_int_get(self_in);
|
return mp_obj_int_get(self_in);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if MICROPY_ENABLE_FLOAT
|
||||||
|
mp_float_t mp_obj_int_as_float(mp_obj_t self_in) {
|
||||||
|
if (MP_OBJ_IS_SMALL_INT(self_in)) {
|
||||||
|
return MP_OBJ_SMALL_INT_VALUE(self_in);
|
||||||
|
} else {
|
||||||
|
mp_obj_int_t *self = self_in;
|
||||||
|
return self->val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -215,9 +215,10 @@ mp_obj_t mp_obj_new_int_from_long_str(const char *str) {
|
|||||||
machine_int_t mp_obj_int_get(mp_obj_t self_in) {
|
machine_int_t mp_obj_int_get(mp_obj_t self_in) {
|
||||||
if (MP_OBJ_IS_SMALL_INT(self_in)) {
|
if (MP_OBJ_IS_SMALL_INT(self_in)) {
|
||||||
return MP_OBJ_SMALL_INT_VALUE(self_in);
|
return MP_OBJ_SMALL_INT_VALUE(self_in);
|
||||||
|
} else {
|
||||||
|
mp_obj_int_t *self = self_in;
|
||||||
|
return mpz_as_int(&self->mpz);
|
||||||
}
|
}
|
||||||
mp_obj_int_t *self = self_in;
|
|
||||||
return mpz_as_int(&self->mpz);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
machine_int_t mp_obj_int_get_checked(mp_obj_t self_in) {
|
machine_int_t mp_obj_int_get_checked(mp_obj_t self_in) {
|
||||||
@@ -225,4 +226,15 @@ machine_int_t mp_obj_int_get_checked(mp_obj_t self_in) {
|
|||||||
return mp_obj_int_get(self_in);
|
return mp_obj_int_get(self_in);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if MICROPY_ENABLE_FLOAT
|
||||||
|
mp_float_t mp_obj_int_as_float(mp_obj_t self_in) {
|
||||||
|
if (MP_OBJ_IS_SMALL_INT(self_in)) {
|
||||||
|
return MP_OBJ_SMALL_INT_VALUE(self_in);
|
||||||
|
} else {
|
||||||
|
mp_obj_int_t *self = self_in;
|
||||||
|
return mpz_as_float(&self->mpz);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user