[Numpy-svn] r2920 - trunk/numpy/lib
numpy-svn at scipy.org
numpy-svn at scipy.org
Fri Jul 28 16:11:09 EDT 2006
Author: cookedm
Date: 2006-07-28 15:11:08 -0500 (Fri, 28 Jul 2006)
New Revision: 2920
Modified:
trunk/numpy/lib/machar.py
Log:
numpy.lib.machar: replace 'while 1' loops with 'for _ in max_iter'
If there are bugs in the scalar objects, the 'while 1' loops can potentially
run forever, so we make sure they only go at most 1000 times.
Modified: trunk/numpy/lib/machar.py
===================================================================
--- trunk/numpy/lib/machar.py 2006-07-28 20:02:07 UTC (rev 2919)
+++ trunk/numpy/lib/machar.py 2006-07-28 20:11:08 UTC (rev 2920)
@@ -58,6 +58,7 @@
float_to_str - convert array float to str
title - description of used floating point numbers
"""
+ max_iter = range(1000)
one = float_conv(1)
two = one + one
zero = one - one
@@ -65,41 +66,49 @@
# Do we really need to do this? Aren't they 2 and 2.0?
# Determine ibeta and beta
a = one
- while 1:
+ for _ in max_iter:
a = a + a
temp = a + one
temp1 = temp - a
if any(temp1 - one != zero):
break
+ else:
+ raise RuntimeError
b = one
- while 1:
+ for _ in max_iter:
b = b + b
temp = a + b
itemp = int_conv(temp-a)
if any(itemp != 0):
break
+ else:
+ raise RuntimeError
ibeta = itemp
beta = float_conv(ibeta)
# Determine it and irnd
it = -1
b = one
- while 1:
+ for _ in max_iter:
it = it + 1
b = b * beta
temp = b + one
temp1 = temp - b
if any(temp1 - one != zero):
break
+ else:
+ raise RuntimeError
betah = beta / two
a = one
- while 1:
+ for _ in max_iter:
a = a + a
temp = a + one
temp1 = temp - a
if any(temp1 - one != zero):
break
+ else:
+ raise RuntimeError
temp = a + betah
irnd = 0
if any(temp-a != zero):
@@ -116,7 +125,7 @@
for i in range(negep):
a = a * betain
b = a
- while 1:
+ for _ in max_iter:
temp = one - a
if any(temp-one != zero):
break
@@ -126,6 +135,8 @@
if negep < 0:
raise RuntimeError, "could not determine machine tolerance " \
"for 'negep', locals() -> %s" % (locals())
+ else:
+ raise RuntimeError
negep = -negep
epsneg = a
@@ -133,12 +144,14 @@
machep = - it - 3
a = b
- while 1:
+ for _ in max_iter:
temp = one + a
if any(temp-one != zero):
break
a = a * beta
machep = machep + 1
+ else:
+ raise RuntimeError
eps = a
# Determine ngrd
@@ -153,7 +166,7 @@
z = betain
t = one + eps
nxres = 0
- while 1:
+ for _ in max_iter:
y = z
z = y*y
a = z*one # Check here for underflow
@@ -165,6 +178,8 @@
break
i = i + 1
k = k + k
+ else:
+ raise RuntimeError
if ibeta != 10:
iexp = i + 1
mx = k + k
@@ -177,7 +192,7 @@
mx = iz + iz - 1
# Determine minexp and xmin
- while 1:
+ for _ in max_iter:
xmin = y
y = y * betain
a = y * one
@@ -191,6 +206,8 @@
break
else:
break
+ else:
+ raise RuntimeError
minexp = -k
# Determine maxexp, xmax
More information about the Numpy-svn
mailing list