**Thomae’s function**, named after Carl Johannes Thomae, also known as the **popcorn function**, the **raindrop function**, the **countable cloud function**, the **modified Dirichlet function**, the **ruler function**,^{[1]} the **Riemann function** or the **Stars over Babylon** (by John Horton Conway) is a modification of the Dirichlet function. This real-valued function *f*(*x*) is defined as follows:

If *x* = 0 we take *q* = 1. It is assumed here that gcd(*p*, *q*) = 1 and *q* > 0 so that the function is well-defined and non-negative.

**Discontinuities**

The popcorn function is perhaps the simplest example of a function with a complicated set of discontinuities: *f* is continuous at all irrational numbers and discontinuous at all rational numbers.

**Informal Proof**

Clearly, *f* is discontinuous at all rational numbers: since the irrationals are dense in the reals, for any rational *x*, no matter what *ε* we select, there is an irrational *a* even nearer to our *x* where *f*(*a*) = 0 (while *f*(*x*) is positive). In other words, *f* can never get “close” and “stay close” to any positive number because its domain is dense with zeroes.

To show continuity at the irrationals, assume without loss of generality that our *ε* is rational (for any irrational *ε*, we can choose a smaller rational *ε* and the proof is transitive). Since ε is rational, it can be expressed in lowest terms as *a/b*. We want to show that *f*(*x*) is continuous when *x* is irrational.

Note that *f* takes a maximum value of 1 at each whole integer, so we may limit our examination to the space between and . Since *ε* has a finite denominator of *b*, the only values for which *f* may return a value greater than *ε* are those with a reduced denominator *no larger than b*. There exist only a finite number of values between two integers with denominator no larger than *b*, so these can be exhaustively listed. Setting *δ* to be smaller than the nearest distance from *x* to one of these values guarantees every value within *δ* of *x* has *f*(*x*) < *ε*.