@@ -2885,32 +2885,31 @@ math_sumprod_impl(PyObject *module, PyObject *p, PyObject *q)
28852885
28862886            if  (!finished ) {
28872887                double  flt_p , flt_q ;
2888-                 bool  p_type_float  =  PyFloat_CheckExact (p_i );
2889-                 bool  q_type_float  =  PyFloat_CheckExact (q_i );
2890-                 if  (p_type_float  &&  q_type_float ) {
2891-                     flt_p  =  PyFloat_AS_DOUBLE (p_i );
2892-                     flt_q  =  PyFloat_AS_DOUBLE (q_i );
2893-                 } else  if  (p_type_float  &&  (PyLong_CheckExact (q_i ) ||  PyBool_Check (q_i ))) {
2894-                     /* We care about float/int pairs and int/float pairs because 
2895-                        they arise naturally in several use cases such as price 
2896-                        times quantity, measurements with integer weights, or 
2897-                        data selected by a vector of bools. */ 
2888+ 
2889+                 if  (PyFloat_CheckExact (p_i )) {
28982890                    flt_p  =  PyFloat_AS_DOUBLE (p_i );
2899-                     flt_q  =  PyLong_AsDouble (q_i );
2900-                     if  (flt_q  ==  -1.0  &&  PyErr_Occurred ()) {
2891+                 } else  if  (PyLong_CheckExact (p_i ) ||  PyBool_Check (p_i )) {
2892+                     flt_p  =  PyLong_AsDouble (p_i );
2893+                     if  (flt_p  ==  -1.0  &&  PyErr_Occurred ()) {
29012894                        PyErr_Clear ();
29022895                        goto finalize_flt_path ;
29032896                    }
2904-                 } else  if  (q_type_float  &&  (PyLong_CheckExact (p_i ) ||  PyBool_Check (p_i ))) {
2897+                 } else  {
2898+                     goto finalize_flt_path ;
2899+                 }
2900+ 
2901+                 if  (PyFloat_CheckExact (q_i )) {
29052902                    flt_q  =  PyFloat_AS_DOUBLE (q_i );
2906-                     flt_p  =  PyLong_AsDouble (p_i );
2907-                     if  (flt_p  ==  -1.0  &&  PyErr_Occurred ()) {
2903+                 } else  if  (PyLong_CheckExact (q_i ) ||  PyBool_Check (q_i )) {
2904+                     flt_q  =  PyLong_AsDouble (q_i );
2905+                     if  (flt_q  ==  -1.0  &&  PyErr_Occurred ()) {
29082906                        PyErr_Clear ();
29092907                        goto finalize_flt_path ;
29102908                    }
29112909                } else  {
29122910                    goto finalize_flt_path ;
29132911                }
2912+ 
29142913                TripleLength  new_flt_total  =  tl_fma (flt_p , flt_q , flt_total );
29152914                if  (isfinite (new_flt_total .hi )) {
29162915                    flt_total  =  new_flt_total ;
0 commit comments