Exact arithmetic, and what it costs instead

An exact answer to a measured problem

The residual is the zero vector, nothing was rounded at any step, and the answer is wrong in its first digit. Data accurate to fourteen places, an exact solve of the system it defines, and an error of 10⁻⁵ — because conditioning was never a statement about arithmetic and removing the arithmetic error removes none of it.

Worth reading first: The condition number is an amplifier · The exact answer to a nearby problem · An answer with no error in it.

This field opened by removing every term from the identity the site is built on. Forward error zero, backward error zero, residual the zero vector, and a condition number multiplying nothing. Nine essays have been about what replaced it — the length of the numbers, the budget of primes, the bound on a reconstruction — and all of them are cost arguments.

There is one term that did not go away, and it is the one that decides whether any of the cost was worth paying.

An exact solve of a measured 8 × 8 system, against the error the measurement put thereThe rising curve is the distance from the exact solution of a perturbed system to the exact solution of the unperturbed one, as the perturbation grows from a relative 10⁻¹⁶ to 1. Every point on it was computed with no rounding anywhere: the elimination is over the rationals, the residual of each solve is the zero vector, and the error is entirely the data's. At a measurement accurate to 10^-12 the answer is wrong by 9.988·10⁻⁴, which is 10·10⁸ times the data's own error — the matrix's condition number, doing the only job left for it to do. The straight line of slope one is the whole finding: removing the arithmetic error changes nothing about this quantity, because this quantity was never about the arithmetic.10⁻¹⁶10⁻¹⁴10⁻¹²10⁻¹⁰10⁻⁸10⁻⁶10⁻⁴10⁻²110⁻⁷10⁻⁵10⁻³10⁻¹10¹relative error in the datarelative error in the answerthe answer's errorthe data's errornothing here is the arithmetic'sdata error10⁻¹²answer error10·10⁻⁴amplification10·10⁸rounding committed0residual0the residual is exactly zeroand the answer is wrong anyway
Fig. 1 An integer Hilbert system of order eight, perturbed by an exact relative ε and solved over the rationals at every ε from 10⁻¹⁶ to 1. Nothing is rounded at any point on that curve. The residual of every solve is the zero vector.

The measurement

Take the Hilbert matrix of order eight, cleared of its denominators so that every entry is an integer — multiplying by a constant changes no condition number, so this is the classical ill-conditioned matrix arriving in a field that cannot round. Choose a right-hand side. Solve exactly and call the answer the truth, because it is: there is no rounding anywhere in it and the residual is the zero vector.

Now perturb the matrix by an exact relative ε — each entry multiplied by 1 ± ε with ε a rational 10⁻ᵏ, so the perturbation is exactly ε rather than approximately — and solve exactly again. The residual of that solve is also the zero vector. It is the exact solution of the perturbed system.

At ε = 10⁻¹⁴ the two answers differ by a relative 10⁻⁵.

At ε = 10⁻¹⁰ they differ by 0.074. At ε = 10⁻⁶ they differ by 1.34 — the answer has no correct digits at all — and at 10⁻² by 8.8, which is larger than the answer.

The amplification at the accurate end is about 10⁹. That is the matrix’s condition number, doing the only thing left for it to do.

It is worth dwelling on what those numbers are, because the temptation is to read them as an arithmetic failure and there is no arithmetic in them. Every solve on that curve is over the rationals. Every entry of every answer is a fraction in lowest terms. Substituting any of them back into its own system gives an identity between integers, not a small number — the residual is not 10⁻¹⁶, it is the zero vector, and there is nothing on the plot for it to be compared against.

Why the field cannot fix this and never could

The identity says forward error is bounded by condition number times backward error, and this field’s whole achievement is driving the backward error to exactly zero. What it cannot do is anything about the other factor, because the other factor is not about arithmetic.

The condition number is a property of the map from data to answer. It says how far the answer moves when the data moves, and it would say the same thing if the arithmetic were performed by an oracle. The essay that introduced it makes the point in floating point and the point is not about floating point: an amplifier amplifies whatever arrives, and what arrives here is the measurement’s own error rather than a rounding.

So the correct reading of the curve is that it has nothing to do with this field at all. It would be identical if the solves were done in double precision, up to the point where the double precision’s own error became comparable — which for this matrix is at about ε = 10⁻¹⁶, off the left edge. Every point on the plotted curve is a point where the arithmetic contributed nothing and the data contributed everything.

Where the exactness does help, precisely

That is not the same as saying it never helps, and the boundary is worth drawing carefully, because it is the practical content of ten essays.

Exactness helps when the data is exact. A graph’s Laplacian is integers because a graph is vertices and edges; a spanning-tree count is an integer because Kirchhoff’s theorem says so; a combinatorial matrix has the entries it has and no measurement was involved. Those are the cases where the answer is a certificate, and the field’s cost is buying something real.

Exactness helps when the answer is discrete. A rank, a determinant’s sign, a count of lattice points, a decision about whether a system has an integer solution. There the amplification argument does not apply in the same way, because a small perturbation of the data changes the answer by nothing at all until it changes it completely — which is the graph field’s whole subject — and an exact routine lands on the right side of that discontinuity by construction.

And exactness helps as an instrument. The site’s floating-point measurements are checked against exact ones throughout: the Hilbert inverse in closed form, the resistances of a graph as ratios of integers, a characteristic polynomial compared as an integer polynomial. In every one of those the exact answer is not the deliverable; it is the ruler.

It does not help when the data was measured. Then the exact answer is the exact answer to somebody else’s problem, and the distance to the intended one is the condition number times the measurement error, and no arithmetic reaches it.

The awkward case is the fourth, and it is common: data that is nearly exact. A matrix of physical constants known to twelve digits, a discretisation whose coefficients are rationals rounded once when they were tabulated, a graph whose weights were measured. There the data’s error is well above the unit roundoff and well below anything anybody would call inaccurate, and the answer is that exactness buys the difference between 10⁻¹⁶ and the data’s own error — which is to say, nothing, and the routine should be chosen on the cost model rather than on the accuracy.

Why the perturbation had to be exact, which cost a rewrite

The first version of this measurement perturbed the integer matrix the obvious way: scale every entry by 1/ε, round, and read the rounded matrix as the measured one. It produces an integer matrix, it is one line, and it is wrong.

The relative perturbation it applies is the rounding’s, not ε’s. Asked for 10⁻⁶ on a matrix with two-digit entries it delivered about 2·10⁻⁸, so the x-axis of the plot was off by two orders of magnitude and the reported amplification with it. The figure was internally consistent, every assertion in it passed, and the numbers it printed were about a perturbation nobody had asked for.

The repair is to stay in the rationals. Entry aᵢⱼ becomes aᵢⱼ·(1 ± ε) with ε the exact rational 10⁻ᵏ, so the perturbation is ε by construction and the x-axis means what it says. That the repair is available at all is a property of this field — everywhere else on the site a perturbation of a specified size has to be applied approximately, and the essays say so.

It is worth recording because it is the shape of mistake this field is most exposed to. When nothing rounds, there is no residual to notice a construction error by, and an assertion about the answer passes happily while the question is a different one. The check that caught it was arithmetic on the two axes rather than anything the routine reported about itself.

What a backward-stable float solve is worth here, exactly

The comparison worth making is not exact-against-float. It is exact-against-backward-stable, and the site has a phrase for what backward stability delivers: the exact answer to a nearby problem.

A backward-stable float solve returns the exact solution of (A + E)x = b with ‖E‖ of order u‖A‖ — a relative perturbation of about 10⁻¹⁶. An exact solve of measured data returns the exact solution of (A + E)x = b with ‖E‖ the measurement’s own error — here 10⁻¹⁴, a hundred times larger.

The tempting next sentence is that on this system the float solve is therefore nearer to the truth than the exact one, since its effective perturbation is smaller. That sentence is wrong, and it is worth being precise about why, because the arithmetic in it is right and the comparison is not.

The float solve is run on the measured matrix too. Its effective perturbation is the data’s error plus the rounding, never the rounding alone — there is no route that gets to see the unmeasured matrix, which is the whole content of the word measured. The comparison the sentence makes is between an exact solve of the data anybody has and a float solve of data nobody has.

Solving the same exactly-perturbed system both ways, and measuring each against the truth:

   ε        exact solve    float solve    ratio    the two answers apart
 10⁻¹⁶      3.443·10⁻⁷     4.358·10⁻⁷     1.266        9.2·10⁻⁸
 10⁻¹⁴      3.442·10⁻⁵     3.436·10⁻⁵     0.998        6.7·10⁻⁸
 10⁻¹²      3.431·10⁻³     3.431·10⁻³     1.000        1.2·10⁻⁷
 10⁻¹⁰      2.557·10⁻¹     2.557·10⁻¹     1.000        1.7·10⁻⁸
 10⁻⁸       9.657·10⁻¹     9.657·10⁻¹     1.000        1.2·10⁻¹⁰
 10⁻⁴       1.000          1.000          1.000        5.6·10⁻¹⁵

They are the same answer. Not comparably accurate — the same: at ε = 10⁻¹⁰ the two solutions differ from each other by 1.7·10⁻⁸ while both differ from the truth by 0.26, so the rounding is seven orders below the thing being measured. The well-conditioned family gives the same picture with the ratio pinned at 1.0000 across fourteen decades.

The one row where the two separate is the first, ε = 10⁻¹⁶, where the data’s error and the unit roundoff are the same size and the ratio is 1.27 on this matrix and 0.88 on the well-conditioned one — noise, in both directions. That is what a crossover looks like when it is reached rather than passed.

So the rule of thumb the argument was reaching for is correct, and its reason is different: exact arithmetic is worth its cost when the data’s own relative error is below the unit roundoff and worth nothing when it is above, because above it the two routes return the same vector. Not a better one and not a worse one — the same one, to seven digits, at a cost that differs by orders of magnitude. That is a stronger statement than a rule about which is nearer, and it is the one the measurement supports.

It also changes what the decision looks like from inside a program. A rule about which route is nearer is a rule about accuracy, and accuracy is the thing a numerical library is expected to trade against cost — so a reader carrying it would reasonably ask how much accuracy the cheap route gives up and whether the answer is tolerable. There is nothing to trade. Above the crossover the two routes are not two points on an accuracy-cost curve; they are one point at two prices, and the question of how much accuracy is being given up has no answer because the amount is zero.

That is the sharpest form of what this field’s tenth essay has to say, and it cuts both ways. It is why exact arithmetic on measured data is not a conservative choice but a wasted one — the caution buys digits that were destroyed before the routine was called. And it is why exact arithmetic on exact data is not an extravagance: there the crossover has not been reached, the data’s error is genuinely zero, and every digit the routine returns is a digit the float route would have lost.

An exact solve of a measured 8 × 8 system, against the error the measurement put thereThe rising curve is the distance from the exact solution of a perturbed system to the exact solution of the unperturbed one, as the perturbation grows from a relative 10⁻¹⁶ to 1. Every point on it was computed with no rounding anywhere: the elimination is over the rationals, the residual of each solve is the zero vector, and the error is entirely the data's. At a measurement accurate to 10^-6 the answer is wrong by 2.049·10⁻⁶, which is 2.05 times the data's own error — the matrix's condition number, doing the only job left for it to do. The straight line of slope one is the whole finding: removing the arithmetic error changes nothing about this quantity, because this quantity was never about the arithmetic.10⁻¹⁶10⁻¹⁴10⁻¹²10⁻¹⁰10⁻⁸10⁻⁶10⁻⁴10⁻²110⁻¹⁶10⁻¹⁴10⁻¹²10⁻¹⁰10⁻⁸10⁻⁶10⁻⁴10⁻²1relative error in the datarelative error in the answerthe answer's errorthe data's errornothing here is the arithmetic'sdata error10⁻⁶answer error2·10⁻⁶amplification2rounding committed0residual0the residual is exactly zeroand the answer is wrong anyway
Fig. 2 A well-conditioned integer system for contrast: an amplification of 2.05, so a measurement good to six places gives an answer good to six places, and the exactness is again beside the point.

The saturation at the right of the curve

The plot bends, and the bend is worth explaining because it is not a numerical artefact.

At small ε the error is proportional to ε with the condition number as the constant, which is the straight part. As ε grows the perturbed system stops being a perturbation of the original one: at ε = 10⁻² the matrix has changed in its second digit and its solution is a different vector of comparable size, so the relative difference settles at a number of order one rather than continuing to grow. The amplification, being the ratio of the two, therefore falls as ε rises — 10⁹ at 10⁻¹⁴, 1.3·10⁶ at 10⁻⁶, 880 at 10⁻².

Where that bend begins is worth pinning down rather than leaving to the eye, because it is the boundary of every condition-number statement in this field.

An exact solve of a measured 8 × 8 system, against the error the measurement put thereThe rising curve is the distance from the exact solution of a perturbed system to the exact solution of the unperturbed one, as the perturbation grows from a relative 10⁻¹⁶ to 1. Every point on it was computed with no rounding anywhere: the elimination is over the rationals, the residual of each solve is the zero vector, and the error is entirely the data's. At a measurement accurate to 10^-14 the answer is wrong by 1.002·10⁻⁵, which is 10⁹ times the data's own error — the matrix's condition number, doing the only job left for it to do. The straight line of slope one is the whole finding: removing the arithmetic error changes nothing about this quantity, because this quantity was never about the arithmetic.10⁻¹⁶10⁻¹⁴10⁻¹²10⁻¹⁰10⁻⁸10⁻⁶10⁻⁴10⁻²110⁻⁷10⁻⁵10⁻³10⁻¹10¹relative error in the datarelative error in the answerthe answer's errorthe data's errornothing here is the arithmetic'sdata error10⁻¹⁴answer error10⁻⁵amplification10⁹rounding committed0residual0the residual is exactly zeroand the answer is wrong anyway
Fig. 3 Data at 10⁻¹⁴. The answer is wrong by 10⁻⁵ and the amplification is 10⁹ — the straight part, where the condition number is the constant.
An exact solve of a measured 8 × 8 system, against the error the measurement put thereThe rising curve is the distance from the exact solution of a perturbed system to the exact solution of the unperturbed one, as the perturbation grows from a relative 10⁻¹⁶ to 1. Every point on it was computed with no rounding anywhere: the elimination is over the rationals, the residual of each solve is the zero vector, and the error is entirely the data's. At a measurement accurate to 10^-10 the answer is wrong by 0.07441, which is 7.4·10⁸ times the data's own error — the matrix's condition number, doing the only job left for it to do. The straight line of slope one is the whole finding: removing the arithmetic error changes nothing about this quantity, because this quantity was never about the arithmetic.10⁻¹⁶10⁻¹⁴10⁻¹²10⁻¹⁰10⁻⁸10⁻⁶10⁻⁴10⁻²110⁻⁷10⁻⁵10⁻³10⁻¹10¹relative error in the datarelative error in the answerthe answer's errorthe data's errornothing here is the arithmetic'sdata error10⁻¹⁰answer error0.074amplification7.4·10⁸rounding committed0residual0the residual is exactly zeroand the answer is wrong anyway
Fig. 4 At 10⁻¹⁰ the amplification is 7.4·10⁸, still within a quarter of its value four decades below.

The plateau ends somewhere between the second stop and the third. Four decades of noise cost a quarter of the amplification; the next two decades cost a factor of thirty. Below the knee the condition number is the whole story, and above it the answer is already so wrong that the linearisation the condition number comes from has stopped describing the problem.

An exact solve of a measured 8 × 8 system, against the error the measurement put thereThe rising curve is the distance from the exact solution of a perturbed system to the exact solution of the unperturbed one, as the perturbation grows from a relative 10⁻¹⁶ to 1. Every point on it was computed with no rounding anywhere: the elimination is over the rationals, the residual of each solve is the zero vector, and the error is entirely the data's. At a measurement accurate to 10^-8 the answer is wrong by 0.2705, which is 2.7·10⁷ times the data's own error — the matrix's condition number, doing the only job left for it to do. The straight line of slope one is the whole finding: removing the arithmetic error changes nothing about this quantity, because this quantity was never about the arithmetic.10⁻¹⁶10⁻¹⁴10⁻¹²10⁻¹⁰10⁻⁸10⁻⁶10⁻⁴10⁻²110⁻⁷10⁻⁵10⁻³10⁻¹10¹relative error in the datarelative error in the answerthe answer's errorthe data's errornothing here is the arithmetic'sdata error10⁻⁸answer error0.27amplification2.7·10⁷rounding committed0residual0the residual is exactly zeroand the answer is wrong anyway
Fig. 5 And at 10⁻⁸ it is 2.7·10⁷ — down by a factor of thirty, with the answer already wrong by 0.271.

So the first-order regime ends between 10⁻¹⁰ and 10⁻⁸, and it ends abruptly. The amplification is 10⁹ at 10⁻¹⁴ and 7.4·10⁸ at 10⁻¹⁰ — flat to within 26% across four decades — then loses a factor of thirty in the next two and reaches 2.81·10⁴ at 10⁻⁴. What ends it is not the data’s size but the answer’s: at 10⁻⁸ the relative error is 0.271, so there is less than a factor of four of room left before saturation, and a ratio whose numerator cannot grow must fall. The practical form is that a condition number describes the map only while the predicted error is still small compared with one — which for a κ of 10⁹ means data good to better than 10⁻⁹, and is exactly the regime a measured problem is not in.

That is the first-order theory failing exactly where it is supposed to. The condition number bounds the derivative of the answer with respect to the data, so it predicts the error for perturbations small enough that the derivative describes the map, and the bend marks where the perturbation stops being small in that sense. The essay on a condition number for one eigenvalue meets the same boundary from the other side: a first-order sensitivity that is exact in the limit and useless at a perturbation the reader would call small.

So the useful reading of the figure is the left half, where the slope is one, and the right half is the standing reminder that a condition number is a linearisation.

The conditioning is visible in the field’s own unit

There is one thing this field can say about conditioning that the floating-point essays cannot, and it is a small pleasure.

The exact solution of an ill-conditioned integer system has long parts. The Hilbert family’s determinant at order eight occupies forty bits where a random matrix with comparable entries occupies twenty-four, and the answer’s numerators and denominators are correspondingly long. So the difficulty of the problem shows up as bits — as a cost — rather than as an error, and a routine measuring how much work it is doing is measuring something related to the conditioning.

Related, and not equal. The two quantities are genuinely different: a matrix can have a long determinant and be perfectly conditioned, which is what the Hadamard family is, and a matrix can have a determinant of exactly 1 and be badly conditioned, which is what a unit-triangular matrix with large off-diagonal entries is. So the correspondence is a tendency rather than an identity, and it would be an error to read a long answer as a warning. What it is safe to read it as is a cost, which is what this field measures everything in — and the pleasant part is that an ill-conditioned problem is honestly expensive here in a way it is not in floating point, where it costs exactly the same number of operations as an easy one and returns a worse answer for the same price.

The exact solution of a hilbert system is longer than the systemAx = b with A a hilbert integer matrix and b chosen so the answer is a genuine vector of fractions. At n = 8 the question occupies 1216 bits — 8² entries of 19 bits each — and the answer occupies 117, a ratio of 0.0962. Every entry is a ratio of two determinants by Cramer's rule, checked here by multiplying each one back by det A and comparing it with the determinant of the column-replaced matrix as an integer — so every denominator divides det A and none of them is longer than its 40 bits, while a numerator can be, at 16 here. The answer IS that long, whatever route produced it. That is a floor no exact solver can get under, and it is why the modular route reconstructs the answer rather than eliminating its way to it.34567810²nbitsthe answerthe question · det Abits in, bits outn8question1216answer117det A40widest part16the answer is the floorand no route writes it down more cheaply
Fig. 6 The ill-conditioned family’s answers, in bits. The difficulty appears as length here, which is the field’s only currency.

The one place the two authors can be separated completely

There is a positive result buried in the negative one, and it is the sharpest form of a claim this site has been making since its second field.

The identity says a wrong answer has two possible authors and that they are separately measurable. In floating point the separation takes work: a backward error has to be estimated, a condition number has to be estimated, and both estimates carry their own error — the essay on estimating a condition number is about an estimator that can be made to report whatever one likes.

Here the separation is free and it is exact. The backward error is zero, by construction, with no estimate involved. So the entire forward error is the second author’s, and dividing it by the data’s own error gives the amplification measured rather than bounded — 10⁹ on this matrix, at a perturbation where the linearisation still holds.

That makes this field the only place on the site where the identity can be checked rather than applied. Everywhere else the two factors are estimated and their product compared with an observed error, and agreement within an order of magnitude counts as confirmation. Here one factor is exactly zero, the other is exactly the ratio of two exactly computed quantities, and there is nothing left to estimate.

What the field is for, stated once at the end

Ten essays in, the honest summary is a narrow one and it is better for being narrow.

Exact linear algebra removes one of the two authors of a wrong answer completely. That is worth a great deal when the other author is silent — combinatorial data, integral input, a discrete output, a ruler for measuring something else — and it is worth nothing at all when the other author is loud. The cost of removing it is not a slowdown by a constant; it is a change in what the cost model is, from a count of operations to a count of operations weighted by the length of their operands, and the four orders of magnitude between the best and worst arrangements of the same elimination are the field’s central measurement.

And the condition number survives all of it. It was never a statement about arithmetic — that is the site’s oldest claim, made in its second field and repeated in most of the twenty since — and here it is demonstrated in the only setting where it can be demonstrated cleanly, because here it is the only term left.

Backward error, forward error and the condition number, with measured valuesTwo boxes at the top — the problem posed and the nearby problem the algorithm answered exactly — and two answers below them, with the distances between all four labelled by numbers from a Hilbert solve.the problem you posedA = H10b = A·(1, 2, …, 10)the problem it answered exactlyA + δA, b + δb‖δ‖ / ‖A‖ = 2.3·10⁻¹⁷the answer you wantedx = (1, 2, …, 10), exactlythe answer you gotx̂, wrong by 2.7·10⁻⁴ relativebackward error 2.3·10⁻¹⁷forward error 2.7·10⁻⁴κ = 1.6·10¹³κ · η = 3.6·10⁻⁴, and the measured forward error is 2.7·10⁻⁴.The algorithm is not at fault. The problem is.H10, LU with partial pivotingresidual and error differ
Fig. 7 The identity with both factors present, in the field where one of them is not zero.

What links here

Computed from the collection, not written here: the essays that point at this one.

Shares its objects with

Essays that name at least two of the same things, and that neither author linked.

Named objects

A flat tag is an object no other essay names yet.

Backward errorBit lengthCondition numberExact arithmeticExact ground truthForward errorHilbert matrix