[Python-checkins] r60273 - in python/trunk/Lib: rational.py test/test_rational.py

raymond.hettinger python-checkins at python.org
Fri Jan 25 02:23:38 CET 2008


Author: raymond.hettinger
Date: Fri Jan 25 02:23:38 2008
New Revision: 60273
Modified:
 python/trunk/Lib/rational.py
 python/trunk/Lib/test/test_rational.py
Log:
Fix-up signature for approximation.
Modified: python/trunk/Lib/rational.py
==============================================================================
--- python/trunk/Lib/rational.py	(original)
+++ python/trunk/Lib/rational.py	Fri Jan 25 02:23:38 2008
@@ -195,16 +195,17 @@
 n, d = d, n
 return cf
 
- @classmethod
- def approximate_from_float(cls, f, max_denominator):
- 'Best rational approximation to f with a denominator <= max_denominator'
+ def approximate(self, max_denominator):
+ 'Best rational approximation with a denominator <= max_denominator'
 # XXX First cut at algorithm
 # Still needs rounding rules as specified at
 # http://en.wikipedia.org/wiki/Continued_fraction
- cf = cls.from_float(f).as_continued_fraction()
+ if self.denominator <= max_denominator:
+ return self
+ cf = self.as_continued_fraction()
 result = Rational(0)
 for i in range(1, len(cf)):
- new = cls.from_continued_fraction(cf[:i])
+ new = self.from_continued_fraction(cf[:i])
 if new.denominator > max_denominator:
 break
 result = new
Modified: python/trunk/Lib/test/test_rational.py
==============================================================================
--- python/trunk/Lib/test/test_rational.py	(original)
+++ python/trunk/Lib/test/test_rational.py	Fri Jan 25 02:23:38 2008
@@ -155,10 +155,10 @@
 [-4, 1, 6, 15, 1, 292, 1, 1, 1, 2, 1, 3, 1, 14, 3, 3])
 self.assertEqual(R(0).as_continued_fraction(), [0])
 
- def testApproximateFromFloat(self):
- self.assertEqual(R.approximate_from_float(math.pi, 10000), R(355, 113))
- self.assertEqual(R.approximate_from_float(-math.pi, 10000), R(-355, 113))
- self.assertEqual(R.approximate_from_float(0.0, 10000), R(0))
+ def testApproximateFrom(self):
+ self.assertEqual(R.from_float(math.pi).approximate(10000), R(355, 113))
+ self.assertEqual(R.from_float(-math.pi).approximate(10000), R(-355, 113))
+ self.assertEqual(R.from_float(0.0).approximate(10000), R(0))
 
 def testConversions(self):
 self.assertTypedEquals(-1, trunc(R(-11, 10)))


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /