@@ -1278,9 +1278,11 @@ def nanskew(
12781278 #
12791279 # #18044 in _libs/windows.pyx calc_skew follow this behavior
12801280 # to fix the fperr to treat m2 <1e-14 as zero
1281- constant_tolerance = (np .finfo (m2 .dtype ).eps * total ) ** 2
1282- m2 = _zero_out_fperr (m2 , constant_tolerance )
1283- m3 = _zero_out_fperr (m3 , constant_tolerance )
1281+ constant_tolerance = np .finfo (m2 .dtype ).eps * total
1282+ constant_tolerance2 = constant_tolerance ** 2 # match order of m2
1283+ constant_tolerance3 = constant_tolerance2 * constant_tolerance # match order of m3
1284+ m2 = _zero_out_fperr (m2 , constant_tolerance2 )
1285+ m3 = _zero_out_fperr (m3 , constant_tolerance3 )
12841286
12851287 with np .errstate (invalid = "ignore" , divide = "ignore" ):
12861288 result = (count * (count - 1 ) ** 0.5 / (count - 2 )) * (m3 / m2 ** 1.5 )
@@ -1376,9 +1378,10 @@ def nankurt(
13761378 # #57972 arbitrary <1e-14 tolerance leads to problematic behaviour on low variance.
13771379 # We adapted the tolerance to use one similar to scipy:
13781380 # https://github.com/scipy/scipy/blob/04d6d9c460b1fed83f2919ecec3d743cfa2e8317/scipy/stats/_stats_py.py#L1429
1379- constant_tolerance = (np .finfo (m2 .dtype ).eps * total ) ** 2
1380- numerator = _zero_out_fperr (numerator , constant_tolerance )
1381- denominator = _zero_out_fperr (denominator , constant_tolerance )
1381+ constant_tolerance2 = (np .finfo (m2 .dtype ).eps * total ) ** 2 # match order of m2
1382+ constant_tolerance4 = constant_tolerance2 ** 2 # match order of m4
1383+ numerator = _zero_out_fperr (numerator , constant_tolerance2 )
1384+ denominator = _zero_out_fperr (denominator , constant_tolerance4 )
13821385
13831386 if not isinstance (denominator , np .ndarray ):
13841387 # if ``denom`` is a scalar, check these corner cases first before
0 commit comments