def testErrorFunction(self): x = 1.7e-09 self.assertAlmostEqual(errorFunction(x), 1.918245e-9, 15) x = 7 self.assertAlmostEqual(errorFunction(x), 1.0, 12) x = -7 self.assertAlmostEqual(errorFunction(x), -1.0, 12)
def __call__(self, z): z = (z - self._average) / self._sigma result = 0.5 * (1.0 + errorFunction(z * _M_SQRT_2)) if result <= 1.0e-8: sumRes = 1.0 zsqr = z * z i = 1.0 g = 1.0 a = 2.20e308 while True: lasta = a x = (4.0 * i - 3.0) / zsqr y = x * ((4.0 * i - 1.0) / zsqr) a = g * (x - y) sumRes -= a g *= y i += 1.0 if a < 0.0: a = -a if lasta <= a or a < math.fabs(sumRes * _QL_EPSILON): break return -self._gaussian(z) / z * sumRes return result