From 379e83fdec827f0fcc57d3f3dafc739ad2519aeb Mon Sep 17 00:00:00 2001 From: wirawan Date: Fri, 10 Sep 2010 21:23:59 +0000 Subject: [PATCH] * Added epsilon() function to find out the granuality of a given floating point type. --- math/__init__.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/math/__init__.py b/math/__init__.py index 236e51b..1da8f54 100644 --- a/math/__init__.py +++ b/math/__init__.py @@ -1,4 +1,4 @@ -# $Id: __init__.py,v 1.2 2010-05-28 18:43:59 wirawan Exp $ +# $Id: __init__.py,v 1.3 2010-09-10 21:23:59 wirawan Exp $ # # wpylib.math main module # Created: 20091204 @@ -28,3 +28,17 @@ def ztol(val, tol=None, copy=True): else: raise ValueError, "Unsupported datatype: %s" % str(type(val)) + +def epsilon(dtype): + """A simple way to determine (at runtime) the precision of a given type + real number. + Precision is defined such that (1.0 + epsilon(dtype) > 1.0). + Below this number, the addition will not yield a different result. + """ + one = dtype(1.0) + small = one + small2 = small + while one + small > one: + small2 = small + small = dtype(small / 2) + return small2