Errata  First Edition
(First printing, March 2007)
You have a first printing of the First Edition of the book if the MorganKaufmann logo on the front cover is at the lower left. If this logo is at the lower right, check the Errata for the First Revised Edition.
In a book of over 650 pages, produced under time pressure, some errata are perhaps unavoidable. We are nevertheless embarassed by any error, and apologize for any inconvenience caused.
All we can do at this stage is report the errors we know about. We are interested in any you may find. Please send them to leo@science.uva.nl. We have put time stamps on the corrections made since the appearance of the book, to facilitate updating your copy.
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.
Those errata in bold correspond to Major Corrections; those marked with '*' correspond to Minor Corrections, and those that are unmarked correspond to Typos.
 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 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 3, line 7, change n to N. [20070723]
 *Pg 5, Fig 1.2: add comment "ni represents the point at infinity". [20070828 MM]
 *Pg 5, Fig 1.2, line 6: replace 'e2' by 'n' and add comment "n is a direction vector". [20070828 MM]
 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, Table 2.3, line A,B,etc: delete "typically not a vector". [20071008 MM]
 *Pg 47, Table 2.3, line 5: Change kvectors of any grade to multivectors. [20081018 JS]
 Pg 47, line 5: change bold to bold capital. [20071008 MM]
 **Pg 49, first equation: both indices should run from 0 to n. [20070411 AH]
 **Pg 49, equation (2.10):
Is wrong, it should count all contributions that make up the
intended grade, as in
<A∧B>_{k} = Σ^{k}_{i=0} <A>_{i} ∧<B>_{ki}.
We do not actually use this Grassmann algebra equation, so this error does not affect the mathematics in the remainder of the text. [20070507 RP]  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 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 61, line 5: change to v(p) = V(p)/ V(p). [20071008 MM]
 Pg 62, last paragraph: Citation to [46] should be to [45]. [20080110]
 *Pg 69, line 6: change "This involves" to "In 3D, this involves" [20070808 AC]
 Pg 69, second line below the main derivation should have a⋅a instead of a⋅b. [20070411 AH]
 *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 73, line 20: change "mapping" to "bilinear mapping". [200080326 AC]
 Pg 73, line 1921: change "(kl)blade" to "(lk)blade" and change Λ^{kl} R^{n} to Λ^{lk} R^{n}. [20071016 GG]
 Pg 74, line 6: change "another vector" to "additional vectors". [20071016 GG]
 Pg 74, line 4: change "inner product of ... and" to "contraction of ... onto". [20070521 PdB]
 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, 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 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 85, line 19,20: "dual by B" is perhaps too colloquial, since dualization always involves the inverse B^{1}; so "dual by B^{1}" would be more accurate. [20100828 AV]
 Pg 90, middle equation: append a subscript j to each of the three Σs. [20071027 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 91, the basis in Drill 3.10.1.1 lacks e_{1}∧e_{2}. [20070401]
 *Pg 92, exercise 7: show this in a 1dimensional Euclidean space. [20070401]
 Pg 92, first line of exercise 9: should say "right angle" not "straight angle". [20080125 RNG]
 Pg 92, last line of exercise 3: remove the. [20070401]
 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 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 109, line 4: Only for a Euclidean metric with an orthonormal basis is the matrix of the adjoint equal to the transpose; for other metrics, a metric tensor needs to be included with the transpose. This fact makes the final statement of this paragraph all the more valid. [20071127 GG]
 Pg 109, line 4: remove first comma from equation. [20071127 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 113, line 3: Change also a linear transformation to also an outermorphism. [20130924]
 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 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 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 117, last line of 4.6: transformations should be transformation. [20120921]
 *Pg 118, exercise 4: hand calculations are simpler if you use instead f[b] = +3a  5b. [20070401]
 Pg 118, structural exercise 4: put square brackets around the arguments of f (twice). [20070401]
 *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 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 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 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 130, eq 5.10: Here we use the undualization of pg.81 for the first time. [20100830 AV]
 *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, line 11: second A∩B should be A∪B [20070813 AC]
 *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 136, last bullet: Citation to [10] should be to [8]. [20080110]
 **Pg 137, structural exercise 2: The target formulas are wrong, and the exercise should be cancelled. [20080712 GG]
 *Pg 137, exercise 3, change "magnitude" to read "magnitude of their meet". [20070401]
 *Pg 137, exercise 1, the second equation should have A rather than its inverse. [20070401]
 Pg 143, last line of 6.1.2: should say "that they can be retrieved separately" [20080125 RNG]
 *Pg 144, line 9: Change "each element" to "each invertible element". [20081018 JS]
 Pg 148, distributivity: change (A+B)C = AB+BC to (A+B)C = AC + BC. [20070524 BJC]
 *Pg 151, middle: change k l +2 to k l +2. [20080712 WKW]
 Pg 153, below (6.17): Change "that a rightmultiplication" to "that rightmultiplication". [20081018 JS]
 *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 158, Figure 6.4: In view of the text, it would be more consistent to label the result as axa^{1} [20100830 AV]
 Pg 160, the basis in Drill 6.6.1.2 lacks e_{1}∧e_{2}. [20070401]
 Pg 160, a simpler example is grade 2 of the product of the blades e_{1} ∧ e_{3} and (e_{1}e_{2}) ∧ (e_{3}e_{4}) . [20100201 AS]
 *Pg 162, line 7: subscript should be lk. [20090104 ORSL]
 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 190, the entry for row A and column Y should have an extra (1)^{n1}. [20070401]
 Pg 192, eq. 7.18: change x to X. [20120214 TC]
 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 203, exercise 8, change 2π/3 to 2π/3. [20070723]
 Pg 207, bottom line: x^{2} should be y^{2} [20070822 AC]
 **Pg 217, (8.3): coefficient 1/4 should be 1/3!. [20070822 AC]
 Pg 217, second last sentence in paragraph after (8.4): the 'You' should be 'you'. [20070711]
 *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 222, equation (8.8): Implicitly, we have used that I is constant in step 2 (where we use (exp(Iφ/2))' = (Iφ/2)' exp(Iφ/2) ), although the text claims that both I and φ can vary. The proper of the derivative of the versor R(τ) does result in a commutation product with a bivector. But this bivector is not ∂_{τ}[Iφ], it is 2∂_{τ}[R(τ)]R(τ)^{˜}, which evaluates to I∂_{τ}[φ]+∂_{τ}[I](exp(Iφ)1)/I. (Use ∂_{τ}[exp(Iφ/2)] = ∂_{τ}[cos(φ/2)Isin(φ/2)] = I∂_{τ}[φ/2]exp(Iφ/2)  ∂_{τ}[I]sin(φ/2).) [20080712 PJ]
 Pg 223, last formulas: the division should be interpreted as 'right division'. [20070822 AC]
 *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 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, last formula: ∂_{x}⋅F(x) should be ∂_{x}⌋F(x). [20070822 AC]
 Pg 231: Citation [28] should be [26]. [20080110]
 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 237, entry ∂_{X}X should not be m but 'm choose grade(X)' so (_{grade(X)}^{m}). [20121011]
 **Pg 237, penultimate entry Table 8.2: should be ∂_{X}(X^{1}*A) = P[X^{1} A X^{1}]. [20080326 RV]
 Pg 239, first line: reverse the order of the arguments of ∧. [20070822 AC]
 Pg 239, second paragraph Citation to [37] should be to [36]. [20080108 DD]
 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, (10.11): exchange a and b, and include a minus sign in all three definitions. This gives positive angles for a positive orientation of a∧b∧c. [20070822 AC]
 Pg 253, figure 10.3: remove spurious symbol t. [20070823]
 **Pg 254, first equation: swap a and c. [20070822 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 258, line 6: [20071127 AC]
 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, (10.16) and (10.19): last R should have an index j. [20070904 AC]
 Pg 262, line 10: in "Optimal scaling σ_{ij} em", drop em. [20070904 AC]
 Pg 264, last paragraph of 10.5: Citation [24] should be [23]. [20080110]
 *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 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 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 287, line 12: change X to x. [20071008 PJK]
 **Pg 291, Table 11.3: entry Support of Finite Flat should have denominator e_{0}^{1}⌋X. [20070904 AC]
 Pg 291, table 11.3 caption line 2: change "a a finite" to "a finite". [20080326 RV]
 *Pg 293, caption figure 11.5: replace p by x (twice). [20070401]
 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 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 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 305, lines 10, 17 for X^{*}: change e_{0}^{1} to e_{0}^{1} [20070915 AC]
 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, bottom line: replace p by x (twice). [20070401]
 Pg 314, line 3: change 'trough' to 'through'. [20071027 PJK]
 *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 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 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 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 329, (12.3), and Table 12.1: In earlier errata, we tried to bring our notation in agreement with at least one standard on the signs of Plücker coordinates, namely the often referred [57]. This is possible, but since [57] uses a counterintuitive characterization of the direction of the line PQ (namely from Q to P), the changes relative to our text are rather ubiquitous. For this edition of the book, the simplest is to distinguish between the 'Shoemake Plücker direction' a = pq, and the 'GA direction' u = qp = a. The moment vector m = p × q can be defined as m = (p ∧ q)^{*}. With that, the line of (12.2) would be represented in [57] as {a,m}, so that is the change to (12.3). Though the line coordinates are homogeneous, an oriented geometry should process this sign consistently. But Table 12.1 is about the line {a,m}, oriented from Q to P, since [57] is. Our great thanks to Allan Cortzen for helping to sort out these annoying signs! [20080712 AC]
 Pg 331, just above 3.Lines: its coordinate should be its coordinates. [20070401]
 *Pg 331, line 7: Change direction vector to minus the usual direction vector. [20070915 AC]
 ** Pg 332, line 14 and corresponding line in Table 12.1 'Plane through line and point': change m⋅p to m⋅p. [20080712 AC]
 Pg 333, line 6: Divide the RHS by a_{1}×a_{2} to actually get (11.20). [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 335, Table 12.2, entry (Affine,Plane): Change [t]^{T} to [t]^{T}det(f)[f]^{T}, and change 1 (element [4,4]) to det(f). [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 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 338, line 8: remove "inner and", and replace "both spanning and intersection behave" by "spanning behaves". [20070401 AC]
 *Pg 339, line 10: replace e_{0}^{1}  f by e_{0}^{1}  f^{1}. [20071011 AC]
 *Pg 339, line 7: Replace matrix entry [f^{1}] by [f^{1}]. [20071127 AC]
 Pg 345, First equation: The last term should be (a⋅m'_{C})m'_{A} ∧ m'_{B}. [20080131 RNG]
 *Pg 346, line 10: replace R^{1}_{B} by R^{A}_{B} (twice). [20071011 AC]
 Pg 349, line 4: Should say "would be implemented as". [20080131 RNG]
 *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 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 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 389, structural exercise 1: A p is missing on the right hand side. [20070716]
 *Pg 389, structural exercise 9: There are only four degrees of freedom in this motion, so it is not the general RBM. Determine it anyway. [20110308]
 *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 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 7: Change length to signed length. [20071130 AC]
 Pg 405, line 11: Change This is a vector to This may be pictured as a vector. [20071130 AC]
 **Pg 407, Table 14.1:
Some annoying sign errors crept into this table and its associated
derivations. You may download a new
copy of the table with all these corrections incorporated.
[20070717]
 Table 14.1, entry (flat, direction): add minus
 Table 14.1, entry (dual flat, direction): add minus
 Table 14.1, entry (dual tangent, direction): change to (∞⌋X^{*})∧ ∞
 Table 14.1, entry (dual round, direction): change to (∞⌋X^{*})∧ ∞
 Table 14.1, entry (tangent, location): add minus to X/(∞⌋X)
 Table 14.1, entry (dual tangent, location): add minus to X/(∞⌋X)
 Table 14.1, entry (round, location): add minus to X/(∞⌋X)
 Table 14.1, entry (dual round, location): add minus to X/(∞⌋X)
 Table 14.1, entry (round, squared size): change minus to plus
 Table 14.1, entry (dual round, squared size): change plus to minus
 **Pg 407, table 14.1: On top of other errors already corrected earlier, the entry (dual round, squared size) should have the plus changed to minus. [20071130 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 408, line 9: Remove "but the formula then computes ρ^{2}" [20070401]
 **Pg 409, line 8: include minus sign in X/(∞⌋X) [20070401]
 *Pg 418, caption Fig 14.8: change "two times" and "twice" to "half". [20070723]
 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 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 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 427, drill 5: The carrier is only properly defined in Section 15.2.2. [20070712]
 Pg 431, line 2: Should say "of the circles". [20080131 RNG]
 Pg 439, line 2: Change of the remaining to of one of the remaining. [20071130 AC]
 Pg 439, caption Figure 15.1: Second meet should be plunge, second plunge should be meet. [20071122 PJK]
 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 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 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 12: Change "instead to" to "instead of". [20070726]
 Pg 453, line 8: Change 'plane u' to 'dual plane u'. [20080103 AC]
 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 457, middle: Drop the sentence 'It automatically ... and r'. [20080103 AC]
 Pg 458, last line of 15.5.3: Change directed to signed. [20080103 AC]
 *Pg 459, last 4 lines: Swap φ and ψ (18 times!). [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 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 462, caption figure 15.3: The period '.' at the end of the caption is missing. [20081214]
 Pg 462, caption figure 15.3: change "circle C" to "circle K", and "dual sphere s" to "dual sphere σ = Σ^{*}". [20080326 RV]
 *Pg 466, line 8: E should be transformed according to σ Ê σ^{1}, and the result is therefore simply E. [20080103 AC]
 **Pg 472, line 6: replace by T_{t} R = R T_{R1tR}. [20071019 AH]
 Pg 473, first line of 16.3.4: should say "transformations". [20080131 RNG]
 **Pg 475, line 3: The answer for this transversion over t should be 1 + ot = e^{ot}. This correction should be propagated through the text. It changes the last line of Table 16.1 (remove the '/2' twice), and the last column of Table 16.2 (replace t by 2t in this column only). [20080103 AC]
 Pg 476, line 2: replace two spheres by two equalradius spheres. [20120823 SP]
 Pg 477, Table 16.2, in transversion column: Change e to E. [20080103 AC]
 Pg 480, line 10: The translation matrix should have 1s on its diagonal. [20080103 AC]
 Pg 480, line 9: Change inversion to conjugated inversion. [20080103 AC]
 Pg 483: Citation [17] should be [15]. [20080110]
 *Pg 483 drill 3: Replace e_{1}∧e_{2} by e_{1}+e_{2}. [20070401]
 Pg 485, exercise 5, Change the second origin to centers. [20070401]
 Pg 485, exercise 5: replace two touching spheres by two touching equalradius spheres. [20120823 SP]
 *Pg 485 structural exercise 4: not true for general flats. Replace flats by flats through the origin. [20070401]
 *Pg 485, structural exercise 5: Change the last a to its inverse a^{1}. [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, exercise 7: Change cycloid to cyclide. [20120514]
 *Pg 486, Figure 16.12: Change cycloid to cyclide. [20120514]
 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 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 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 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, equation (B.1): first B⌋A on last line should be A⌊B [20071127 PJK]
 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.3 line 2: Change 'then' to 'them'. [20120417]
 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, last paragraph: Citation to [19] should be to [17]. [20080108 DD]
 Pg 591, section B.1.4, next to last paragraph: Citation to [17] should be to [15]. [20080108 DD]
 *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}=C_{k} 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}.
 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 601, line 3: There should be tildes on the final B_{l} and A_{k}. [20110801 JinS]
 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]