Limit Explorer

Explore limits visually. Watch function values converge (or not) as x approaches a target.

Loading interactive simulation...

Every derivative is a 0/0 in disguise 🖖

Limits are not a technicality on the way to calculus — calculus cannot start without them. The slope of a curve at a single point is (f(x+h) − f(x)) / h with h set to 0, and that is 0/0 for every function there is. Division cannot answer it: 0/0 is not a number, and no amount of algebra makes it one. What a limit does is sidestep the question, asking what the quotient heads toward as h shrinks rather than what it equals once h arrives. That dodge is the whole reason a tangent line has a slope at all.

Where a function is heading, not its value there 🖖

A limit asks where a function is heading as x closes in on a point — not what happens at the point itself. That gap matters: sin(x)/x is undefined at x = 0 (it reads 0/0), yet from both sides the graph aims straight at 1. Drag x toward the target and watch the left and right values agree; when they do, the limit exists even if the curve has a hole.

When the table of numbers lies 🖖

This tool samples f at x = 10⁻ⁿ for n = 1, 2, …, 8. Feed it sin(π/x) near 0 and every row reads exactly 0, because sin(10ⁿπ) = 0 for whole-number exponents — the table happily reports a limit of 0. Yet between those sample points the function swings between −1 and +1 forever, so the true limit does not exist. Numerical convergence is a hint, never a proof.

LIMIT THEORY — WHAT THE GRAPH DOES AS x CLOSES IN ON a

Which Limit Case Are You Looking At?

A limit asks where f is heading as x approaches a, never what f does at a. Read the two one-sided limits first: if they agree you have a limit, and the only question left is whether f(a) matches it. If they disagree, the way they disagree — a step, a blow-up, or an endless wobble — names the case.

Removable hole — both sides agree, f(a) is missing L⁻ = L⁺ ≠ f(a)
0/0 that cancels — factor before you conclude 0/0 → ÷(x − a)
Jump — the two sides disagree L⁻ ≠ L⁺
Infinite — the values run off the scale f → ±∞ at x = a
Oscillation — the values never settle ∄L, |f| ≤ 1

01

Removable hole — both sides agree, f(a) is missing

What you know: The left and right limits are equal and finite, but f(a) is undefined. Substituting a gives 0/0, and no factor cancels.

Test: L⁻ = L⁺ ≠ f(a)

Worked example: f(x) = sin(x)/x at a = 0 → f(0) reads 0/0, yet f(±0.001) = 0.99999983 → limit = 1

Open this case: sinc sin(x)/x
Removable hole — both sides agree, f(a) is missing. Both branches aim at the same height; only the point itself is punched out. The left and right limits are equal and finite, but f(a) is undefined. Substituting a gives 0/0, and no factor cancels.
Both branches aim at the same height; only the point itself is punched out.

02

0/0 that cancels — factor before you conclude

What you know: Substituting a gives 0/0, and the numerator and denominator share a factor of (x − a).

Test: 0/0 → ÷(x − a)

Worked example: f(x) = (x² − 1)/(x − 1) at a = 1 → (x − 1)(x + 1)/(x − 1) = x + 1 → limit = 2

Open this case: L'Hopital
0/0 that cancels — factor before you conclude. After cancelling, the graph is the straight line y = x + 1 with one point removed. Substituting a gives 0/0, and the numerator and denominator share a factor of (x − a).
After cancelling, the graph is the straight line y = x + 1 with one point removed.

03

Jump — the two sides disagree

What you know: Both one-sided limits are finite, but they are different numbers. The graph steps from one level to another at a.

Test: L⁻ ≠ L⁺

Worked example: f(x) = |x|/x at a = 0 → left limit = −1, right limit = +1 → the limit does not exist

Open this case: Jump |x|/x
Jump — the two sides disagree. Two flat branches at different heights: the sides disagree, so no single limit exists. Both one-sided limits are finite, but they are different numbers. The graph steps from one level to another at a.
Two flat branches at different heights: the sides disagree, so no single limit exists.

04

Infinite — the values run off the scale

What you know: At least one side grows without bound. Substituting a gives a non-zero number over zero, so a vertical asymptote stands at x = a.

Test: f → ±∞ at x = a

Worked example: f(x) = 1/x at a = 0 → values → −∞ from the left and → +∞ from the right → no finite limit

Open this case: Infinite 1/x
Infinite — the values run off the scale. Both branches race away from the axis along the vertical asymptote x = a. At least one side grows without bound. Substituting a gives a non-zero number over zero, so a vertical asymptote stands at x = a.
Both branches race away from the axis along the vertical asymptote x = a.

05

Oscillation — the values never settle

What you know: The function stays bounded, yet keeps sweeping the same range infinitely often, however close to a you look.

Test: ∄L, |f| ≤ 1

Worked example: f(x) = sin(1/x) at a = 0 → between x = 0.001 and x = 0.002 the graph completes about 80 full cycles, hitting every value in [−1, 1]

Open this case: Oscillation sin(1/x)
Oscillation — the values never settle. The wobble gets faster, not smaller, as x approaches 0. The function stays bounded, yet keeps sweeping the same range infinitely often, however close to a you look.
The wobble gets faster, not smaller, as x approaches 0.

Problem solved in full

  1. Proving that sin x / x → 1 with a δ for every ε 5 steps

    Prove that sin x / x → 1 by producing a δ for every ε, and predict the table's two usable rows before reading them. This is f(x) = sin(x)/x with x → 0.

    1. Dividing the sine series by x is legal for every x ≠ 0, which is the only place a limit ever looks. What comes out has nothing but even powers of x in it, and that is why the left and right columns of the table carry identical digits on every row.

    2. Two terms are enough here: the x⁴ term is already down at 8.33 × 10⁻⁷, too small to touch the sixth decimal.

    3. Move in by a factor of ten and the gap to 1 shrinks by a factor of a hundred. The approach is quadratic in x, which is a much stronger claim than “the limit is 1” — and the table's own two rows are enough to establish it.

    4. Evidence is not proof, so bound the whole tail at once. For |x| ≤ 1 the series alternates with shrinking terms, so everything after the 1 is smaller in size than the first term dropped, and that term is x²/6. Turning the inequality around makes δ a formula rather than a search.

    5. Read what the square root costs. Tightening ε by a factor of a million buys back only a factor of a thousand in x.

    Answer

    The table prints 0.998334 at x = 0.1 and 0.999983 at x = 0.01, and both were written out here from four terms of a series before the panel was consulted. What δ = √(6ε) adds is certainty: name any tolerance and the x that meets it is one square root away, so no amount of further zooming can turn up a surprise. It also explains why the table runs out of things to say. Its rows step x down by ten while the gap falls by a hundred, so by the third row that gap is 1.6667 × 10⁻⁷ — under half a unit in the sixth decimal — and that row and the five below it all print 1.000000, though the value at x = 0.001 is 0.99999983. Keep the gap rather than discarding it: divide the first row's 1.665834 × 10⁻³ by 0.01 and you get 0.16658, which is 1/6. A second limit sits underneath the famous one, and the series named it in advance.

Learning path

Why everything looks straight up close

Leads to The derivative what approaches means when the value at the point does not exist.

References (1)

Example problems

  • sinc sin(x)/x - Both sides reach 1.000000 by ε = 0.001, so the limit exists and the page calls it continuous
  • Jump |x|/x - L⁻ = −1 against L⁺ = +1 at every ε — a jump, and the two-sided limit does not exist
  • Infinite 1/x - −∞ and +∞: at ε = 10⁻⁶ the sides read −1000000 and 1000000, growing without bound
  • Oscillation sin(1/x) - Neither side settles — the left column reads 0.544021, then 0.506366, then −0.826880 — so both one-sided limits print undefined
  • L'Hopital - 0/0 at x = 1, yet both sides converge to 2.000000: removable, and f(1) stays undefined