Learning Objectives
By the end of this section you will be able to:
- Classify any point where a function fails continuity as removable, jump, infinite, or essential.
- Use the three-condition test from §3.2 to diagnose , , and whether the two are equal.
- Decide whether a discontinuity can be repaired by redefining , or whether it is structurally broken.
- Detect each type numerically from one-sided probes, and justify why smooth activations dominate modern machine learning.
Why Classify Discontinuities?
In §3.2 we distilled continuity down to a three-step checklist at a point :, , and . When any one of these fails, the function is discontinuous at . But saying "the function is broken" is vague — how is it broken?
The way the test fails determines everything about how we repair (or can't repair) the function. A missing dot you can fill in. A finite jump you cannot smooth out without changing the function everywhere. A vertical asymptote signals that the function has left the planet. Naming these four modes is the first step to doing something about them — whether that means canceling a common factor, adding a Heaviside term in a physics model, or rejecting an activation that kills gradients.
The big idea. Every discontinuity fits one of four templates. Pin down which template and you immediately know: (i) whether the function has a limit there, (ii) whether a redefinition can fix it, (iii) what the graph looks like locally, and (iv) what the function will do to a differential equation, a numerical solver, or a learning algorithm that has to cross that point.
The Three Tests That Can Fail
Continuity at is the conjunction of three conditions. A discontinuity is any pattern of failures in those three. The table shows which tests fail for each of our four types — that mapping IS the classification.
| Type | defined? | exists? | ? | Repairable? |
|---|---|---|---|---|
| Continuous (no discontinuity) | yes | yes | yes | — |
| Removable | sometimes | yes | no | yes — redefine f(c) |
| Jump | yes | no (two-sided) | — | no |
| Infinite | no | no (blows up) | — | no |
| Essential / oscillating | no | no (wild) | — | no |
Type 1 — Removable (the Hole)
A removable discontinuity at is a point where the two-sided limit exists and is finite, but the function either has a different value at or has no value at all. Visually, the graph is a smooth curve with a single dot missing — or a dot placed somewhere above or below the curve.
Canonical example. . Algebraically, factoring gives . So the function is just the line with a single dot missing at . The left and right limits both equal , but the literal formula gives at .
Second flavour — the floating dot. Sometimes is defined but placed somewhere the curve doesn't go: e.g. The two-sided limit is still , but . Same diagnosis: redefine and continuity is restored.
Type 2 — Jump (the Cliff)
A jump discontinuity at is where the two one-sided limits each exist and are finite, but they disagree: . The graph drops (or rises) instantaneously. Unlike a removable hole, no single dot can bridge the gap — the function really does "teleport" across an interval.
Canonical example. The Heaviside step . At , and — the gap is exactly 1. The value is a convention; any rule that makes one of leaves the jump in place.
Type 3 — Infinite (the Tower)
An infinite discontinuity is where at least one one-sided limit is . The graph has a vertical asymptote at .
Canonical example. . Both one-sided limits are : . A cousin is , which has and .
Type 4 — Essential / Oscillating
An essential (or oscillating) discontinuity is the catch-all for pathologies where neither one-sided limit exists as a finite number nor as . The function doesn't settle.
Canonical example. as . As shrinks, runs through all values in for any , and so visits every value in infinitely many times. No single limit.
The Family Tree of Discontinuities
All four types fit into a single decision tree driven by the one-sided limits and :
| Classification | |||
|---|---|---|---|
| finite | finite, = L | = L | continuous |
| finite | finite, = L | ≠ L or undefined | removable |
| finite | finite, ≠ L | — | jump |
| ±∞ or finite | ±∞ or finite (one blows up) | — | infinite |
| DNE | DNE | — | essential (oscillating) |
The first three rows split by what happens to the two one-sided limits alone. The bottom two rows cover the two ways a one-sided limit can fail to be a finite number — blowing up (Type 3) or failing to settle at all (Type 4).
Interactive: Discontinuity Explorer
Pick a preset, then slide to watch the left (orange) and right (blue) probes approach . The diagnostic panel reports the running left limit, right limit, the actual value , and which of the four types the function exhibits. For the removable case, the "Patch the hole" checkbox demonstrates how a single-point redefinition restores continuity.
Worked Example — Classify Three Functions
Let's work by hand through three small problems so the classifier in your head is well-calibrated before we hand the job to a computer.
▶Show full worked solution (three parts)
Part (a) — Classify f at x = 2, where f(x) = (x² − 4) / (x − 2).
Simplify. for .
Left limit. . Right limit. . f(2): , undefined.
Verdict. Both one-sided limits exist and agree at 4, but is undefined. This is a removable discontinuity. Repair by defining .
Part (b) — Classify g at x = 0, where g(x) = |x| / x for x ≠ 0, g(0) = 0.
Rewrite piecewise.
Left limit: . Right limit: . They are finite but disagree.
Verdict. Jump discontinuity at 0. No single-point redefinition can fix it — the gap is of size .
Bonus: sits in the middle of the gap. That value is harmless but does nothing to help — even if we changed it to or , the two-sided limit would still not exist.
Part (c) — Classify h at x = 3, where h(x) = 1 / (x − 3).
Left limit: as , , so .
Right limit: as , , so .
Verdict. Infinite discontinuity at 3. The function has a vertical asymptote; a left-blowup to and a right-blowup to .
- Compute (or estimate) the one-sided limits.
- Compare them to each other and to .
- Use the decision table to name the type.
Python: Detecting Discontinuities Numerically
We now encode the decision table as a short Python function. The strategy is exactly the one we used by hand — probe the function at , inspect , and branch on the outcomes. No symbolic algebra needed.
PyTorch: Why Continuity Matters for Gradients
Continuity is not just an aesthetic property — it is the precondition for differentiability, which is the precondition for gradient-based training. The clearest way to see this is to compare a continuous activation (ReLU) with a discontinuous one (the step function) and watch what PyTorch's autograd engine does with each.
Where Each Type Shows Up in the Real World
| Domain | Type that appears | Why |
|---|---|---|
| Rational functions & symbolic simplification | Removable | Common factors in numerator and denominator produce holes; canceling them is a removable repair. |
| Digital signal processing | Jump | Sampled / quantized signals and on/off controllers produce Heaviside-like edges. |
| Classical physics (point sources) | Infinite | Coulomb force 1/r², gravitational potential 1/r, line charges: all blow up at the source location. |
| Thermodynamics phase transitions | Jump (first-order) / Essential (higher-order) | Density / enthalpy jumps at first-order phase transitions; derivatives of free energy misbehave at critical points. |
| Economics & finance | Jump | Tax brackets, dividend ex-dates, piecewise-defined payoff functions. |
| Machine learning | Must be removed | Loss landscapes need continuity for gradient descent. Step activations are historically the first thing abandoned. |
| Numerical ODE solvers | All four — catastrophically | Adaptive step controllers can get stuck at a jump or asymptote; detecting discontinuities is a whole subfield (event detection). |
Common Pitfalls
- Calling a removable discontinuity "smooth". Without the repair, the function is not continuous at . Algebraic simplification changes the formula on a dense set but does not redefine the function at the missing point.
- Confusing corners with jumps. has a corner at — the function is continuous there, but not differentiable. A corner is a failure of smoothness, not of continuity.
- Believing numerical probes always find discontinuities. Functions like can hide arbitrarily close to . A probe at may see a value near 0 purely by coincidence while the function is wildly oscillating.
- Treating "f(c) defined" as enough. The Heaviside step has perfectly defined, yet is still discontinuous at 0 because the two-sided limit does not exist.
- Assuming "infinity from both sides" is continuous. Even when has left and right limits that both equal , the function is not continuous — the value is not a real number; continuity requires a finite matching value.
Summary
- Discontinuities come in four flavours — removable, jump, infinite, and essential/oscillating — determined by what happens to the two one-sided limits at .
- Removable holes can be repaired by a single-point redefinition. No other type can.
- The classification table (§3.3, "Family Tree") is a complete decision procedure — compute L, R, and , then read off the type.
- Numerically, a simple two-probe algorithm with appropriate tolerances classifies the common cases; pathological oscillations require the formal - machinery of §2.5.
- In machine learning, discontinuities must be avoided in activations and losses because they either zero out or undefine the gradient needed by backprop.
Next, in §3.4, we turn from naming failures to celebrating successes: the algebraic properties that guarantee large families of functions — sums, products, compositions of continuous pieces — are continuous by construction.