diff --git a/Lib/rational.py b/Lib/rational.py
index f86904d..b922fbf 100755
--- a/Lib/rational.py
+++ b/Lib/rational.py
@@ -410,40 +410,6 @@
 
     __int__ = __trunc__
 
-    def __floor__(a):
-        """Will be math.floor(a) in 3.0."""
-        return a.numerator // a.denominator
-
-    def __ceil__(a):
-        """Will be math.ceil(a) in 3.0."""
-        # The negations cleverly convince floordiv to return the ceiling.
-        return -(-a.numerator // a.denominator)
-
-    def __round__(self, ndigits=None):
-        """Will be round(self, ndigits) in 3.0.
-
-        Rounds half toward even.
-        """
-        if ndigits is None:
-            floor, remainder = divmod(self.numerator, self.denominator)
-            if remainder * 2 < self.denominator:
-                return floor
-            elif remainder * 2 > self.denominator:
-                return floor + 1
-            # Deal with the half case:
-            elif floor % 2 == 0:
-                return floor
-            else:
-                return floor + 1
-        shift = 10**abs(ndigits)
-        # See _operator_fallbacks.forward to check that the results of
-        # these operations will always be Rational and therefore have
-        # __round__().
-        if ndigits > 0:
-            return Rational((self * shift).__round__(), shift)
-        else:
-            return Rational((self / shift).__round__() * shift)
-
     def __hash__(self):
         """hash(self)
 
diff --git a/Lib/test/test_rational.py b/Lib/test/test_rational.py
index bd700b1..b97922c 100644
--- a/Lib/test/test_rational.py
+++ b/Lib/test/test_rational.py
@@ -197,14 +197,6 @@
     def testConversions(self):
         self.assertTypedEquals(-1, trunc(R(-11, 10)))
         self.assertTypedEquals(-1, int(R(-11, 10)))
-        self.assertTypedEquals(-2, R(-11, 10).__floor__())
-        self.assertTypedEquals(-1, R(-11, 10).__ceil__())
-        self.assertTypedEquals(-1, R(-10, 10).__ceil__())
-
-        self.assertTypedEquals(0, R(-1, 10).__round__())
-        self.assertTypedEquals(0, R(-5, 10).__round__())
-        self.assertTypedEquals(-2, R(-15, 10).__round__())
-        self.assertTypedEquals(-1, R(-7, 10).__round__())
 
         self.assertEquals(False, bool(R(0, 1)))
         self.assertEquals(True, bool(R(3, 2)))
@@ -218,13 +210,6 @@
 
         self.assertTypedEquals(0.1+0j, complex(R(1,10)))
 
-    def testRound(self):
-        self.assertTypedEquals(R(-200), R(-150).__round__(-2))
-        self.assertTypedEquals(R(-200), R(-250).__round__(-2))
-        self.assertTypedEquals(R(30), R(26).__round__(-1))
-        self.assertTypedEquals(R(-2, 10), R(-15, 100).__round__(1))
-        self.assertTypedEquals(R(-2, 10), R(-25, 100).__round__(1))
-
 
     def testArithmetic(self):
         self.assertEquals(R(1, 2), R(1, 10) + R(2, 5))
