https://github.com/python/cpython/commit/f4d1be46b47532a7c17002916462061edc7be351
commit: f4d1be46b47532a7c17002916462061edc7be351
branch: main
author: Sergey B Kirpichev <[email protected]>
committer: vstinner <[email protected]>
date: 2026-03-25T07:06:38+01:00
summary:
gh-145633: Drop runtime checks for floatting-point formats in the array module
(#146162)
files:
M Modules/arraymodule.c
diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c
index 9381aa5eced90f..f4a888af16f942 100644
--- a/Modules/arraymodule.c
+++ b/Modules/arraymodule.c
@@ -11,6 +11,7 @@
#include "pycore_bytesobject.h" // _PyBytes_Repeat
#include "pycore_call.h" // _PyObject_CallMethod()
#include "pycore_ceval.h" // _PyEval_GetBuiltin()
+#include "pycore_floatobject.h" // _PY_FLOAT_BIG_ENDIAN
#include "pycore_modsupport.h" // _PyArg_NoKeywords()
#include "pycore_moduleobject.h" // _PyModule_GetState()
#include "pycore_weakref.h" // FT_CLEAR_WEAKREFS()
@@ -91,9 +92,6 @@ enum machine_format_code {
* instead of using the memory content of the array directly. In that
* case, the array_reconstructor mechanism is bypassed completely, and
* the standard array constructor is used instead.
- *
- * This is will most likely occur when the machine doesn't use IEEE
- * floating-point numbers.
*/
UNSIGNED_INT8 = 0,
@@ -2011,24 +2009,10 @@ typecode_to_mformat_code(char typecode)
return UTF32_LE + is_big_endian;
case 'f':
- if (sizeof(float) == 4) {
- const float y = 16711938.0;
- if (memcmp(&y, "\x4b\x7f\x01\x02", 4) == 0)
- return IEEE_754_FLOAT_BE;
- if (memcmp(&y, "\x02\x01\x7f\x4b", 4) == 0)
- return IEEE_754_FLOAT_LE;
- }
- return UNKNOWN_FORMAT;
+ return _PY_FLOAT_BIG_ENDIAN ? IEEE_754_FLOAT_BE : IEEE_754_FLOAT_LE;
case 'd':
- if (sizeof(double) == 8) {
- const double x = 9006104071832581.0;
- if (memcmp(&x, "\x43\x3f\xff\x01\x02\x03\x04\x05", 8) == 0)
- return IEEE_754_DOUBLE_BE;
- if (memcmp(&x, "\x05\x04\x03\x02\x01\xff\x3f\x43", 8) == 0)
- return IEEE_754_DOUBLE_LE;
- }
- return UNKNOWN_FORMAT;
+ return _PY_FLOAT_BIG_ENDIAN ? IEEE_754_DOUBLE_BE : IEEE_754_DOUBLE_LE;
/* Integers */
case 'h':
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]