Minor Errata
This page lists minor corrections, improvements and obvious typos. The main errata page list the major corrections.
Not all browsers support all standard html symbols (older versions of Internet Explorer, for example). If you think that this symbol "⌋" looks like a square, you may want to view the bitmap symbol version.
Minor corrections and improvements:
 Pg 5, Fig 1.2, line 6: replace 'e2' by 'n' and add comment "n is a direction vector". [20070828 MM]
 Pg 5, Fig 1.2: add comment "ni represents the point at infinity". [20070828 MM]
 Pg 47, Table 2.3, line 5: Change kvectors of any grade to multivectors. [20081018 JS]
 Pg 52, drill 4: change support vector to position vector (twice). [20071008 MM]
 Pg 53, exercise 7: this is not really 'harder', but A should obviously be assumed to be nonzero. [20070713]
 Pg 53, exercise 7: insert "precisely" after "contains". [20081018 SP]
 Pg 69, line 6: change "This involves" to "In 3D, this involves" [20070808 AC]
 Pg 70, case 3:
blades can be disjoint and still have a welldefined cosine measure
[20070808 AC].
Replace the text of item 3 by:
 We then need at least two rotations in orthogonal 2blades to bring the subblades into alignment (see [52]). The cosine computed by (3.5) is now equal to the product of the cosines of these orthogonal rotations, and therefore zero if at least one of them is over a right angle. In that case, the blades should be considered perpendicular. (An example of such a situation in 4D space involves the 2blades A = e_{1}∧e_{3} and B =(cosα e_{1} sinα e_{2})∧(cosβ e_{3} sinβ e_{4}). Verify that A∧B =  sinα sinβ e_{1}∧e_{2}∧e_{3}∧e_{4}, so that they are indeed disjoint, while their cosine equals A∗B˜ = cosα cosβ.)
 Reinterpreting a zero cosine within this larger context, it means that two blades are perpendicular if they require at least one rightangle rotation to align them.
 Pg 82, Figure 3.5: In figure (a) change { a^{*} = A } to { A }, and { a } to { a = A^{*} }. In figure (b) change { A^{*} = a } to { a }, and { A } to { A = (a)^{*} }. In the caption change 'of a vector a is the bivector A' to 'of a bivector A is the vector a' and change 'The dual of ' to 'The vector whose dual is'. [20080820 PH]
 Pg 92, exercise 7: show this in a 1dimensional Euclidean space. [20070401]
 Pg 106, just below equation: Change 'By induction...follows' to 'Similar steps can be used to provide an inductive proof of the general result for blades of (3.26).' [20071029 GG]
 Pg 112, second to last paragraph: the formula involves [f]^{T}, the inverse of the transpose. We should have introduced this nonstandard notation explicitly. [20070401]
 Pg 116, line 4: One should avoid counting blades like b_{1}∧b_{2} and b_{2}∧b_{1} twice, for instance by an ordering demand on the indices such as i<j. [20071127 GG]
 Pg 118, exercise 4: hand calculations are simpler if you use instead f[b] = +3a  5b. [20070401]
 Pg 119, exercise 7: It is better to redefine g by including a reversion of its argument through A * g[A^{˜}]. [20070401]
 Pg 119, exercise 9: The metric needs to be nondegenerate, or the reciprocal may not exist. [20071127 AC]
 Pg 119, exercise 13: The mapping f is a nonuniform scaling rather than a shear. Do the exercise, then change one e_{1} into e_{2} to get a proper shear, and do it again. [20070401]
 Pg 129, the paragraph before (5.6)
contains an error, for A'^{1} is not generally equal to
B⌋J^{1}.
Replace this paragraph by the following continuation of the derivation:
 Then 1=(B⌋J^{1})∗(A⌊M^{1})=(M^{1}∧(B⌋J^{1}))∗A=(M^{1}∧(B⌋J^{1}))⌋A. Now M=M∧1=M∧((M^{1}∧(B⌋J^{1}))⌋A)=(M⌋(M^{1}∧(B⌋J^{1})))⌋A=(B⌋J^{1})⌋A, so that we obtain:
 Pg 130, the example: the normalization of A is wrong, it should not be ½ but 1/√3. This should be propagated through the example, changing all factors of ½. In the final line of (5.9), the factor pulled out is then √(2/3), and the last paragraph of the example should give the angle as asin(√(2/3)). [20080326 GG]
 Pg 130: the last argument in the second line of the derivation should be (e_{2}+e_{3}) rather than e_{3}, though this does not affect the final outcome. [20070401]
 Pg 133, line 8: change "linear transformations" to "invertible linear transformations". [20080326 GG]
 Pg 134, line 11: The table entry for 'Point and Plane' in 'Space' should have a minus, not a plus. [20081018 JS]
 Pg 135, halfway: It is not true that adj(f)^{1}[J^{1}] = f[J]^{1}. Therefore this particular derivation of the structure preservation of the meet is incorrect. A more direct derivation is to observe that the defining equations (5.1) and (5.2) are also valid, by outermorphism, for f[A], f[B], f[M], f[J]. Therefore the ftransformed part of (5.6) is valid too, so f[A∩B] = f[A]∩f[B], with f[J] substituting for J. [20070911 AC]
 Pg 137, exercise 1, the second equation should have A rather than its inverse. [20070401]
 Pg 137, exercise 3, change "magnitude" to read "magnitude of their meet". [20070401]
 Pg 144, line 9: Change "each element" to "each invertible element". [20081018 JS]
 Pg 151, middle: change k l +2 to k l +2. [20080712 WKW]
 Pg 157, middle derivation: from line 2 onwards, a factor ½ is missing, and line 3 should have a minus on the term AaxA^{1}. [20070813 AC]
 Pg 162, line 7: subscript should be lk. [20090104 ORSL]
 Pg 203, exercise 8, change 2π/3 to 2π/3. [20070723]
 Pg 222, last 2 lines: The intended bold notation ω of the angular velocity vector was not conveyed in printing. It should be used throughout on the last line, and replace the first two ω symbols on the line before. [20071008 PJK]
 Pg 225, bottom derivation:
AC reports a more compact derivation:
lim_{ε→0} ((x+εa)^{1}x^{1})/ε = lim_{ε→0} x^{1} ((x+εa)x)/ε) (x+εa)^{1} = x^{1} a x^{1}. [20071127 AC]  Pg 255, last line: There is a better way to permit the possibilities R^{p} = ± 1 (in the second paragraph), namely by requiring R^{2p} = 1. This avoids some subtle problems in the 3D equation, which is then replaced by (ab)^{2p}=(bc)^{2q}=(ca)^{2r}=1. [20070911 AC, personal communication]
 Pg 255, line 20: '16 equivalent' should be '8 equivalent'. [20070911 AC]
 Pg 256, line 2 to 5: Although the resulting condition 1/p+1/q+1/r>1 is correct, the polar triangle argument we are using here is flawed. Following a hint from AC, we are studying Coxeter to summarize the proper derivation. [20071127 AC]
 Pg 266, line 0: Add if (ha == (mv::Float)0.0) return _rotor((mv::Float)1.0); to the code example at the top of the page, so before the comment line // return rotor: [20080326 AC]
 Pg 266, line 13: The code comment // return src * exp(alpha * log(dst * inverse(src))); should read // return src * exp(alpha * log(inverse(src) * dst));. [20080326 AC]
 Pg 286, section 11.5.3: This would be a good place to be more precise about the definition of weight. Write the direction A of a finite kflat X in terms of a chosen pseudoscalar I_{k} for its subspace as A = ω I_{k} , then ω is the weight of the blade. For an infinite (k+1)blade X, choose a pseudoscalar I_{k+1} and write X = ω I_{k+1}, then ω is the weight of the blade. In both cases, the sign of the weight is determined by the chosen orientation of the pseudoscalar, but its magnitude is geometrically objective. It is simple to prove from the definition that a weight is translation invariant. Note also that unit weight and unit norm are different concepts; for the point representation e_{0}+p has weight 1, but norm √(e_{0}^{2}+p^{2}) [20080326 AC]
 Pg 293, caption figure 11.5: replace p by x (twice). [20070401]
 Pg 296, figure 11.7(a): swap the signs in part (a) of the figure only. Because of the counterintuitive signs resulting in (a) and (c), AC has the sensible suggestion to redefine the relative orientation of A to B as B ∩ A(so that the orientator is written first, the orientatee last). [20080326 AC]
 Pg 297, top: An additional remark could be made: Relative to a join of weight 1, and using its orientation as standard, one has p∩q = (p∧q)^{*} = ±(qp). [20080326 AC]
 Pg 314, bottom line: replace p by x (twice). [20070401]
 Pg 315, Fig 11.12: mark the intersection of the green line and the line L^{*} with a red point. [20070829]
 Pg 316, exercise 4: replace k+1 by k1. [20070715]
 Pg 318, exercise 12: in (11.20) and the text, the 6pointed stars (suggesting full homogeneous duality) should be 5pointed stars (Euclidean duality relative to the unit weight direction blade I_{2} of I). Also, the final duality in (10.20) should be replaced by division by I_{2}. [20080326 AC]
 Pg 318, exercise 17 is flawed, though the message stands. Even for the translation of a point x, one needs to use a nonversorlike sandwiching T x T. Show that. [20070401]
 Pg 331, line 7: Change direction vector to minus the usual direction vector. [20070915 AC]
 Pg 333, line 3: The signs of Π ∩ L and L ∩ Π are identical (see Table 5.1). The simplest way to fix this is to put a minus in front of Π ∩ L. As a consequence, the following paragraph should stop after the phrase "It corresponds to the result in Table 12.1" (and we apologize to [60]). [20070401 AC]
 Pg 338, line 8: remove "inner and", and replace "both spanning and intersection behave" by "spanning behaves". [20070401 AC]
 Pg 338, line 2: the direction formula should be D = e_{0}^{1}⌋(e_{0}∧(f^{1}⌋X)) and the support point is at (e_{0}^{1}⌋e_{0}∧X)/D. [20070401 AC]
 Pg 339, line 7: Replace matrix entry [f^{1}] by [f^{1}]. [20071127 AC]
 Pg 339, line 10: replace e_{0}^{1}  f by e_{0}^{1}  f^{1}. [20071011 AC]
 Pg 346, line 10: replace R^{1}_{B} by R^{A}_{B} (twice). [20071011 AC]
 Pg 349, lines 14, 15, 16, 17:
Change the four lines following // compute images of basis vectors to
point imageOfE1 = _point(R * e1 * Ri + (T ^ (e0 << (R * e1 * Ri))));
point imageOfE2 = _point(R * e2 * Ri + (T ^ (e0 << (R * e2 * Ri))));
point imageOfE3 = _point(R * e3 * Ri + (T ^ (e0 << (R * e3 * Ri))));
point imageOfE0 = _point(R * e0 * Ri + (T ^ (e0 << (R * e0 * Ri))));
This change has no effect on the actual outcome of the computation as (T ^ (e0 << (R * ei * Ri)))) is zero for e1, e2, e3 and e0 is not affected by R. [20080326 AC]  Pg 389, drill 11: This is a nonsensical problem; cancel it. [20070716]
 Pg 389, exercise 5: Show the formula, but there is no need to adapt the algorithm. [20070716]
 Pg 396, line 4: The code comment // return src * exp(alpha * log(dst * inverse(src))); should read // return src * exp(alpha * log(inverse(src) * dst));. [20080326 AC]
 Pg 407409:
We should have defined more clearly what we mean by weight and orientation as the split of the geometrical concept direction into a scalar and a unit blade element. In the caption of Table 14.2, weight is defined in a manner that makes it always positive  but this then presumes that the orientation will pick up the sign. AC clarifies the issue raised in the second paragraph of page 409:

Let D = E_{k} ∞
be the direction of a conformal blade X.
If a unit orientation I_{k} has been given for the kD vectorspace of E_{k}, and E_{k} = α I_{k}, then α is the weight of E_{k}, and the orientation of X is sign(α) I_{k}.
If k=0, the standard orientation is 1, and if k=n, the standard orientation is I_{n}. These are invariant under rigid body motions; for the other kvalues the orientations are still invariant under translations.  Pg 418, caption Fig 14.8: change "two times" and "twice" to "half". [20070723]
 Pg 425, line 13: replace "on the sum" by "on the squared sum". [20080326 AC]
 Pg 425, line 16: Change o⌋uv to uv. Remove the sentence "By translation covariance...x. [20080326 AC]
 Pg 425, line 18: replace "with that" by "with the square of that". [20080326 AC]
 Pg 425, (14.12): Errata correction! V.U should be V⌋U. Add: "This equation is translationcovariant and holds at x = o, so it is valid everywhere". [20081214 AC]
 Pg 427, drill 5: The carrier is only properly defined in Section 15.2.2. [20070712]
 Pg 445, line 11: change o∧(c⌋E) to o∧(c⌋E)^{ˆ}. [20080326 AC]
 Pg 446, line 7: insert: Formula (15.2) can be interpreted as the dual of Σ relative to the carrier of dimension k; therefore the expression equals (c½ρ^{2}∞) (1)^{k}, which is a dual sphere containing Σ. [20080326 AC]
 Pg 446, (15.3) and just after (15.5): Change (1)^{n} to (1)^{k}, where k is the dimension of the carrier. [20071130 AC]
 Pg 457, middle: Drop the sentence 'It automatically ... and r'. [20080103 AC]
 Pg 459, last 4 lines: Swap φ and ψ (18 times!). [20080103 AC]
 Pg 461, exercise 4: There are two formula errors and a flaw in this exercise. Either drop it completely, or make spotting those the actual exercise. Do not use the formula in applications. [20070401]
 Pg 466, line 8: E should be transformed according to σ Ê σ^{1}, and the result is therefore simply E. [20080103 AC]
 Pg 483 drill 3: Replace e_{1}∧e_{2} by e_{1}+e_{2}. [20070401]
 Pg 485 structural exercise 4: not true for general flats. Replace flats by flats through the origin. [20070401]
 Pg 485, exercise 5, Change exp(o∧t/2) to exp(o∧t), to be in line with major erratum about pg 475, line 3. [20081214]
 Pg 485, structural exercise 5: Change the last a to its inverse a^{1}. [20070401]
 Pg 494 line 8: The code comment // return src * exp(alpha * log(dst * inverse(src))); should read // return src * exp(alpha * log(inverse(src) * dst));. [20080326 AC]
 Pg 594, step 2:
It was pointed out to us by GG that step 2 of this proof
is logically flawed, since it assumes
a ⊆ C_{k1}
without first proving this from the premise
a ⊆ C_{k}. He provided total rewrite of these steps of the proof,
but a local fix was given by AC:

1. As step 1 of the induction, if one of
A, B or C is a scalar, this is covered by either of the
cases "A is scalar" or "A is not scalar, but B is".
Both are trivial.
2. In case 2, replace "is equivalent to ...[end of equation]" by: is equivalent to a∧C_{k1}=0 for some blade C_{k1}. Then we obtain:
a∧(b⌋C_{k}) = a∧(b⌋(a∧C_{k1})) = a∧((b⌋a)∧C_{k1}  a∧(b⌋C_{k1})) = a∧(b⌋a)∧C_{k1} = (a⌋b)⌋C_{k}.
Obvious typos and rephrasings:
The following are obvious typos, etc., that you will likely spot on your own as you read the text. Pg xix, C.1: change Peometric to Geometric. [20070525 EH]
 Pg xx, caption of figure 3.3: we mean a 2blade. [20070401]
 Pg xxi, caption of figure 6.1: we mean Noninvertibility. [20070401]
 Pg xxii, caption figure 11.5: replace p by x. [20070716]
 Pg xxviii: the section numbers of the list of programming examples are in regular font, instead of bold. [20070401]
 Pg 3, line 7, change n to N. [20070723]
 Pg 6, Fig 1.3: denote center of sphere as c. [20070828 MM]
 Pg 7, item Intersections: change πL/π to πL/π. [20070828 MM]
 Pg 14, line 4: change split in to split into. [20070828 MM]
 Pg 17, line 2: change have had to have. [20070828 MM]
 Pg 24, property (7) has one β too many on the rhs. [20070510 JM]
 Pg 29, line 3: change products to product. [20071008 MM]
 Pg 40, Figure 2.7: the long blue arrow, and its label, should be red. [20070401]
 Pg 40, line 2: delete more than. [20071008 MM]
 Pg 41, line 2,3: change to line L and line M. [20071008 MM]
 Pg 42, par 5, line 3: change is that to conveys that. [20071008 MM]
 Pg 47, line 5: change bold to bold capital. [20071008 MM]
 Pg 47, Table 2.3, line A,B,etc: delete "typically not a vector". [20071008 MM]
 Pg 50, line 8: change Λ^{2} R^{n} to Λ R^{n}. [20071016 GG]
 Pg 51, the basis in Drill 2.12.1.1 lacks e_{1}∧e_{2}. [20070411 AH]
 Pg 52, exercise 3, drop comma. [20070401]
 Pg 61, line 5: change to v(p) = V(p)/ V(p). [20071008 MM]
 Pg 62, line 4: change vector fields to vector fields evaluated.
 Pg 62, last paragraph: Citation to [46] should be to [45]. [20080110]
 Pg 69, second line below the main derivation should have a⋅a instead of a⋅b. [20070411 AH]
 Pg 73, line 1921: change "(kl)blade" to "(lk)blade" and change Λ^{kl} R^{n} to Λ^{lk} R^{n}. [20071016 GG]
 Pg 73, line 20: change "mapping" to "bilinear mapping". [200080326 AC]
 Pg 74, line 4: change "inner product of ... and" to "contraction of ... onto". [20070521 PdB]
 Pg 74, line 6: change "another vector" to "additional vectors". [20071016 GG]
 Pg 78, line 3: change first B^{∼} to A^{∼}. [20071027 HT]
 Pg 78, last in sequence of formulas on second and third lines is missing a (. [20070401]
 Pg 79, line 7: remove extra bracket after C. [20080326 RM]
 Pg 82, (3.24): strictly, the condition A,B ⊆ I should be A ⊆ I, and applies only to the second duality. [20070904]
 Pg 84, line 8: change "x_{⊥}B=0" to "x_{⊥}⌋B=0". [20071016 GG]
 Pg 90, line 2: change m1 to n1. [20071027 GG]
 Pg 90, line 1 and 3 of (3.32): add a ∧ before the second ellipsis in the first line, remove ∧b_{i}... in the third line. [20071127 GG]
 Pg 90, middle: change 'like [16]' to 'like [15]'. [20071027 GG]
 Pg 90, middle equation: append a subscript j to each of the three Σs. [20071027 GG]
 Pg 91, the basis in Drill 3.10.1.1 lacks e_{1}∧e_{2}. [20070401]
 Pg 92, last line of exercise 3: remove the. [20070401]
 Pg 92, first line of exercise 9: should say "right angle" not "straight angle". [20080125 RNG]
 Pg 95, line 5: Change 'Suppose you want to detect red, green, blue LEDs' to 'Suppose you want to detect the light emitted by red, green, blue LEDs' [20080326 AC]
 Pg 103, line 4: change Projection to Parallel Projection. [20071127 GG]
 Pg 105, item 4: change Reflections to Point Reflections. [20071127 GG]
 Pg 109, line 4: remove first comma from equation. [20071127 GG]
 Pg 114, line 6: change (i,j) to (j,i). [20071127 GG]
 Pg 114, line 2: change j^{th} to i^{th}. [20071127 GG]
 Pg 115, line 4: change first b_{j} to b^{j}. [20071127 GG]
 Pg 116, line 3: change index i1 to i=1. [20071127 GG]
 Pg 117, formula for f[A⌋B]: the ∗ should be ⌋, see (4.13). [20070810 PJK]
 Pg 118, structural exercise 4: put square brackets around the arguments of f (twice). [20070401]
 Pg 120, first line: "through" should be "though". [20080125 RNG]
 Pg 129, just above (5.7): change "the meet is the dual of" to "the dual meet is". [20070830 PJK]
 Pg 135, line 11: second A∩B should be A∪B [20070813 AC]
 Pg 136, last bullet: Citation to [10] should be to [8]. [20080110]
 Pg 143, last line of 6.1.2: should say "that they can be retrieved separately" [20080125 RNG]
 Pg 148, distributivity: change (A+B)C = AB+BC to (A+B)C = AC + BC. [20070524 BJC]
 Pg 153, below (6.17): Change "that a rightmultiplication" to "that rightmultiplication". [20081018 JS]
 Pg 160, the basis in Drill 6.6.1.2 lacks e_{1}∧e_{2}. [20070401]
 Pg 171, line 4: change 'to in' to 'to'. [20080712 BT]
 Pg 180, line 4: change siding to sliding. [20070830 PJK]
 Pg 182, 7.3.5, next to last paragraph: should say "This is explored in structural exercise 10" [20080125 RNG]
 Pg 186, middle of page, "So even": change e^{B}+e^{A} to e^{B}e^{A}. [20070830 PJK]
 Pg 196, line 9: change `of dimensionality 0 mod 4' to `whose dimensionality mod 4 equals 0' [20080712 AH]
 Pg 196, 2nd line of (7.22): change '1' to 'x'. [20070911 PJK]
 Pg 196, 2nd line of (7.22): insert 2 in front of BxB. [20081018 JS]
 Pg 200, line 7: change n 2^{ n } to n 2^{ 2(n1) }. [20081018 JS]
 Pg 202: Citation [49] should be [52]. [20080110]
 Pg 207, bottom line: x^{2} should be y^{2} [20070822 AC]
 Pg 217, second last sentence in paragraph after (8.4): the 'You' should be 'you'. [20070711]
 Pg 223, last formulas: the division should be interpreted as 'right division'. [20070822 AC]
 Pg 226, third formula: should be x^{1}P[a]x^{1}. [20070822 AC]
 Pg 226: ∂_{x}(x⋅A) should be ∂_{x}(x⌋A). [20070822 AC]
 Pg 228, (8.10): drop first φ from this line. [20070822 AC]
 Pg 231: Citation [28] should be [26]. [20080110]
 Pg 231, last formula: ∂_{x}⋅F(x) should be ∂_{x}⌋F(x). [20070822 AC]
 Pg 233, Outer Product: change "is can" to "can". [20071008 PJK]
 Pg 236, Section 8.7.2, first sentence Citation to [38] should be to [36]. [20080108 DD]
 Pg 239, second paragraph Citation to [37] should be to [36]. [20080108 DD]
 Pg 239, first line: reverse the order of the arguments of ∧. [20070822 AC]
 Pg 240, last line: change that to than. [20070401]
 Pg 241, exercise 4: change absolute value bars to (double) norm bars. [20070401]
 Pg 250, line 12: Change "algebraic algebra" to "geometric algebra". [20081018 JS]
 Pg 250, line 9: change "so by seperating...in" to "thereby separating...into" [20071008 PJK]
 Pg 252, line 4: U is a unit bivector, v a unit vector. [20070822 AC]
 Pg 253, figure 10.3: remove spurious symbol t. [20070823]
 Pg 258, line 6: add "and additionally make (10.14) valid for the 2nd and 3rd quadrant" after "stability". However, you may then not get the principal value, so an additional test is required to bring the angle in the range [π, π]. [200080326 AC]
 Pg 262, line 10: in "Optimal scaling σ_{ij} em", drop em. [20070904 AC]
 Pg 262, (10.16) and (10.19): last R should have an index j. [20070904 AC]
 Pg 264, last paragraph of 10.5: Citation [24] should be [23]. [20080110]
 Pg 277, eq(11.2): change index of second α to i. [20080712 BT]
 Pg 279, line 12: change (pq) to (qp). [20070904 AC]
 Pg 281, line 11: change ⋅ to ⌋. [20070904 AC]
 Pg 287, line 12: change X to x. [20071008 PJK]
 Pg 291, table 11.3 caption line 2: change "a a finite" to "a finite". [20080326 RV]
 Pg 295, line 2: replace a∧u by p∧u and replace b∧v by q∧v. [20080326]
 Pg 295, line 13: change orientations (v∧u)^{*} to directions (u∧v)^{*}. [20070904 AC]
 Pg 300, line 4: change p_{1} and q_{1} to p' and q', respectively. [20071027 PJK]
 Pg 304, line 3: change X to X. [20070915]
 Pg 308, line 11: change 'locus of the equation' to 'locus of all points x satisfying the equation'. [20071027 PJK]
 Pg 309, line 12: change 'demand' to 'demanding'. [20071027 PJK]
 Pg 313, line 13: remove q^{2} from the numerator, change denominator to e_{0}^{2}q^{2} (and realize that formula assumes e_{0}^{2} ≠ q^{2} to be valid). [20071130 AC]
 Pg 314, line 3: change 'trough' to 'through'. [20071027 PJK]
 Pg 325, figure 11.15: The text inside the screenshot can be improved from The four red points represent the camera and span the imaging plane. to Three red points span the imaging plane and the fourth represents the camera. [20080326 AC]
 Pg 331, just above 3.Lines: its coordinate should be its coordinates. [20070401]
 Pg 333, line 6: Divide the RHS by a_{1}×a_{2} to actually get (11.20). [20070915 AC]
 Pg 336, line 5: change '16^{3} = 4,096' to '2×16^{2}=512'. [20080712 AH]
 Pg 337, line 6: drop of from the support of vector. [20071122 PJK]
 Pg 345, First equation: The last term should be (a⋅m'_{C})m'_{A} ∧ m'_{B}. [20080131 RNG]
 Pg 349, line 4: Should say "would be implemented as". [20080131 RNG]
 Pg 355, line 7: Change "a degenerate" to "an indefinite". [20081018 JS]
 Pg 358, line 13: change in literature to in the literature. [20071122 PJK]
 Pg 359, first line: Citation [10] should be [9]. [20080110]
 Pg 363, Table 13.2, last column: the entries should be about p, π, σ and σ, respectively, rather than all about π. [20071011 AC]
 Pg 371, middle: drop one the from We substitute the the. [20071122 PJK]
 Pg 372, line 5: change A_{k}^{2} to A_{k}^{2}. [20071011 AC]
 Pg 373, figure 13.2: Swap the labels of p and q. [20071130 AC]
 Pg 374, halfway: Change pq to qp. [20071130 AC]
 Pg 376, line 10: Change X^{2} > 0 to X^{2} < 0. [20071130 AC]
 Pg 378, line 17: Should say "from the intersection point". [20080131 RNG]
 Pg 388, drill 6: Replace representation by direct representation. [20070716]
 Pg 400, line 7: Change A_{k} to A_{nk} (twice), and the sixpointed star to a fivepointed star. [20071130 AC]
 Pg 401, line above (14.4): Change this results to these results. [20071122 PJK]
 Pg 403, line 7: Change grade to dimension. [20071130 AC]
 Pg 405, line 11: Change This is a vector to This may be pictured as a vector. [20071130 AC]
 Pg 405, line 7: Change length to signed length. [20071130 AC]
 Pg 418, line 3: Change two spheres to two dual spheres. [20071130 AC]
 Pg 419, line 15: Insert 2 Σ_{i} to the right of the second =. [20071130 AC]
 Pg 419, line 6: Change Γ to Γ'. [20071130 AC]
 Pg 431, line 2: Should say "of the circles". [20080131 RNG]
 Pg 439, caption Figure 15.1: Second meet should be plunge, second plunge should be meet. [20071122 PJK]
 Pg 439, line 2: Change of the remaining to of one of the remaining. [20071130 AC]
 Pg 440, line 7: A more precise formulation could be added: B^{*} ∧ A^{*} is a blade of lowest grade orthogonal to every (nonscalar) factor in A and B. [20080326 AC]
 Pg 441, line 3: Swap ½ and ½. [20071130 AC]
 Pg 441, line 4: Change radius to squared radius. [20071130 AC]
 Pg 450, line 6: Change 1/A^{2} to A^{2}. [20080103 AC]
 Pg 451, line 11: Should say "This is actually a tangent vector". [20080131 RNG]
 Pg 452, Fig 15.11: Squared norm of line should be u^{2}. [20080103 AC]
 Pg 453, line 8: Change 'plane u' to 'dual plane u'. [20080103 AC]
 Pg 453, line 12: Change "instead to" to "instead of". [20070726]
 Pg 454, line 21: Change u_{q} to uq (to avoid the suggestion that this is a covariant expression). By the same token, you could covariantly write u = T_{uo}[o] a few lines lower. [20080103 AC]
 Pg 456, last paragraph: Note that a flat point x∧∞ is normalized when its norm is 1, and a point x is normalized when its weight is 1 (so that ∞⌋x = 1). [20080103 AC]
 Pg 458, last line of 15.5.3: Change directed to signed. [20080103 AC]
 Pg 459, middle (just above 'Either way'): Change penultimate minus to a plus. [20080103 AC]
 Pg 460, drills 1 and 2: Change the Chapter to Chapter, twice. [20070712]
 Pg 460, drill 2: Change Σ to K. [20070718]
 Pg 462, caption figure 15.3: change "circle C" to "circle K", and "dual sphere s" to "dual sphere σ = Σ^{*}". [20080326 RV]
 Pg 462, caption figure 15.3: The period '.' at the end of the caption is missing. [20081214]
 Pg 473, first line of 16.3.4: should say "transformations". [20080131 RNG]
 Pg 477, Table 16.2, in transversion column: Change e to E. [20080103 AC]
 Pg 480, line 9: Change inversion to conjugated inversion. [20080103 AC]
 Pg 480, line 10: The translation matrix should have 1s on its diagonal. [20080103 AC]
 Pg 483: Citation [17] should be [15]. [20080110]
 Pg 485, exercise 5, Change the second origin to centers. [20070401]
 Pg 488, line 4: should say "to the identity". [20080131 RNG]
 Pg 489, figure caption: should say "to conformal versors". [20080131 RNG]
 Pg 489, figure caption: remove the sentence 'Converting a.'. [20081211]
 Pg 490, lines 5,6: should say "we set". [20080131 RNG]
 Pg 507: Citation [51] should be [49]. [20080110]
 Pg 529, line 9: should say "whether a multivector". [20080131 RNG]
 Pg 542: Citation [44] should be [43]. [20080110]
 Pg 556, "EXERCISES" should say "STRUCTURAL EXERCISES". [20070727]
 Pg 575, 23.5.2, line 6: should say "reflections and refractions". [20080131 RNG]
 Pg 575, at the bottom: The code comment reads pix_color. Replace by pixelColor. [20070401]
 Pg 578, halfway: the code comment reads 'fpt'2. Replace by 'fpt2'. [20070401]
 Pg 581, 23.7, line 6: should say "beneficial to represent". [20080131 RNG]
 Pg 587, A.5, line 1: should say "in general metrics". [20080131 RNG]
 Pg 587, line 10: One can construct many more null vectors (in fact, 2pq). Change 'min(p,q) null vectors' to 'at most min(p,q) null vectors for a basis'. [20080712 GG]
 Pg 589, section B.1.1: it is helpful to write A_{k} for A and B_{l} for B. [20071016 GG]
 Pg 590, section B.1.2: Citation to [34] should be to [33]; citation to [17] should be to [15]. [20080108 DD]
 Pg 591, section B.1.4, next to last paragraph: Citation to [17] should be to [15]. [20080108 DD]
 Pg 591, section B.1.4, last paragraph: Citation to [19] should be to [17]. [20080108 DD]
 Pg 594, line below (B.6): remove '=0'. [20071027 HT]
 Pg 595, middle of proof part 4: change 'by (B.6)' to 'by (B.7)'. [20071027 HT]
 Pg 600, last proof, line 3: Delete the ')' [20080131 RNG]
 Pg 600, last proof, line 4: Delete the ')' just before second B_{l} [20080131 RNG]
 Pg 605, line 6 about projection: remove inverse from first B. [20080326 RV]
 Pg 605, line 7: the condition A,B ⊆ I should be A ⊆ I. [20070904 AC]
 Pg 610, reference [21]: change Images to Views [20070808]