Skip to content

Commit 95bac60

Browse files
authored
Merge pull request #367 from t-ikegami/ulab_const_float_fix
Fix implementation of math constants (e, inf, nan, pi).
2 parents fb44eaf + 93cb294 commit 95bac60

File tree

1 file changed

+32
-4
lines changed

1 file changed

+32
-4
lines changed

code/numpy/numpy.c

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,47 @@
3636

3737
// math constants
3838
#if ULAB_NUMPY_HAS_E
39+
#if MICROPY_OBJ_REPR == MICROPY_OBJ_REPR_C
40+
#define ulab_const_float_e MP_ROM_PTR((mp_obj_t)(((0x402df854 & ~3) | 2) + 0x80800000))
41+
#elif MICROPY_OBJ_REPR == MICROPY_OBJ_REPR_D
42+
#define ulab_const_float_e {((mp_obj_t)((uint64_t)0x4005bf0a8b145769 + 0x8004000000000000))}
43+
#else
3944
mp_obj_float_t ulab_const_float_e_obj = {{&mp_type_float}, MP_E};
45+
#define ulab_const_float_e MP_ROM_PTR(&ulab_const_float_e_obj)
46+
#endif
4047
#endif
4148

4249
#if ULAB_NUMPY_HAS_INF
50+
#if MICROPY_OBJ_REPR == MICROPY_OBJ_REPR_C
51+
#define numpy_const_float_inf MP_ROM_PTR((mp_obj_t)(0x7f800002 + 0x80800000))
52+
#elif MICROPY_OBJ_REPR == MICROPY_OBJ_REPR_D
53+
#define numpy_const_float_inf {((mp_obj_t)((uint64_t)0x7ff0000000000000 + 0x8004000000000000))}
54+
#else
4355
mp_obj_float_t numpy_const_float_inf_obj = {{&mp_type_float}, (mp_float_t)INFINITY};
56+
#define numpy_const_float_inf MP_ROM_PTR(&numpy_const_float_inf_obj)
57+
#endif
4458
#endif
4559

4660
#if ULAB_NUMPY_HAS_NAN
61+
#if MICROPY_OBJ_REPR == MICROPY_OBJ_REPR_C
62+
#define numpy_const_float_nan MP_ROM_PTR((mp_obj_t)(0x7fc00002 + 0x80800000))
63+
#elif MICROPY_OBJ_REPR == MICROPY_OBJ_REPR_D
64+
#define numpy_const_float_nan {((mp_obj_t)((uint64_t)0x7ff8000000000000 + 0x8004000000000000))}
65+
#else
4766
mp_obj_float_t numpy_const_float_nan_obj = {{&mp_type_float}, (mp_float_t)NAN};
67+
#define numpy_const_float_nan MP_ROM_PTR(&numpy_const_float_nan_obj)
68+
#endif
4869
#endif
4970

5071
#if ULAB_NUMPY_HAS_PI
72+
#if MICROPY_OBJ_REPR == MICROPY_OBJ_REPR_C
73+
#define ulab_const_float_pi MP_ROM_PTR((mp_obj_t)(((0x40490fdb & ~3) | 2) + 0x80800000))
74+
#elif MICROPY_OBJ_REPR == MICROPY_OBJ_REPR_D
75+
#define ulab_const_float_pi {((mp_obj_t)((uint64_t)0x400921fb54442d18 + 0x8004000000000000))}
76+
#else
5177
mp_obj_float_t ulab_const_float_pi_obj = {{&mp_type_float}, MP_PI};
78+
#define ulab_const_float_pi MP_ROM_PTR(&ulab_const_float_pi_obj)
79+
#endif
5280
#endif
5381

5482
static const mp_rom_map_elem_t ulab_numpy_globals_table[] = {
@@ -60,16 +88,16 @@ static const mp_rom_map_elem_t ulab_numpy_globals_table[] = {
6088
#endif
6189
// math constants
6290
#if ULAB_NUMPY_HAS_E
63-
{ MP_ROM_QSTR(MP_QSTR_e), MP_ROM_PTR(&ulab_const_float_e_obj) },
91+
{ MP_ROM_QSTR(MP_QSTR_e), ulab_const_float_e },
6492
#endif
6593
#if ULAB_NUMPY_HAS_INF
66-
{ MP_ROM_QSTR(MP_QSTR_inf), MP_ROM_PTR(&numpy_const_float_inf_obj) },
94+
{ MP_ROM_QSTR(MP_QSTR_inf), numpy_const_float_inf },
6795
#endif
6896
#if ULAB_NUMPY_HAS_NAN
69-
{ MP_ROM_QSTR(MP_QSTR_nan), MP_ROM_PTR(&numpy_const_float_nan_obj) },
97+
{ MP_ROM_QSTR(MP_QSTR_nan), numpy_const_float_nan },
7098
#endif
7199
#if ULAB_NUMPY_HAS_PI
72-
{ MP_ROM_QSTR(MP_QSTR_pi), MP_ROM_PTR(&ulab_const_float_pi_obj) },
100+
{ MP_ROM_QSTR(MP_QSTR_pi), ulab_const_float_pi },
73101
#endif
74102
// class constants, always included
75103
{ MP_ROM_QSTR(MP_QSTR_bool), MP_ROM_INT(NDARRAY_BOOL) },

0 commit comments

Comments
 (0)