Errata and Typos
Errata and typos will be listed here as they are discovered. Please report errata and typos by submitting an issue on GitHub or by contacting Rico Picone.
- Page 12: “translations them” should be “translations among them”.
- Page 18: “is the for cube()” should be “is the prototype for cube()”
- Page 23: footnote 16: “which handle” should be “which handles”.
- Page 34, Listing 3:
double interactive_add(double total)(in both the prototype and the function definition) should beint interactive_add(double total), since the function returnsEXIT_SUCCESS, which is of typeint. (Credit: Julian Soh) - Page 39: “(sections 1.1 to 1.5)” should be “(sections 1.1 to 1.6)”.
- Page 55, binary-conversion example for $421.73_{10}$ has two errors. First, the last overflow in the table should be 1, not 0. Second, the binary repeating block starts after the second fractional digit and ends one digit earlier, so the result should be $421.73_{10} = 110100101.10\overline{11101011100001010001}_2$. (Credit: Tina Hu)
- Page 99: “
args” should beap(4 times). - Page 100: The statement, “The expression
*p++, equivalent to(*p)++, evaluates to the dereferencedpfirst” should be, “The expression*p++evaluates to the dereferencedpfirst”. - Page 107: Instead of $d_0$ through $d_9$, task durations should be $d_1$ through $d_{10}$. Accordingly, $d_0 = 88$ should be $d_1 = 88$ and $d_8’ = 88$ should be $d_9’ = 88$.
- Page 110: “but unnecessary, for a program” should be “but unnecessary for, a program”.
- Page 112: “to control the calls to
time_it()and interpret the results.” should be “to time calls to each mean-computing function and interpret the results”. - Page 116: the comment on
int y[2] = {3, 9};reads “// defines, defines, and initializes an array” but should read “// declares, defines, and initializes an array” (matching the comment on thefloat x = 7;line above). (Credit: Tina Hu) - Page 124: “
3+8will be computed first” should be “3+18will be computed first”. - Page 124, Example 2.2: the problem statement uses
x /= -2;as the fifth line of the code block, but the solution program on page 125 usesx /= x += 1;(which is what produces the listed output). The problem statement should usex /= x += 1;to match. (Credit: Tina Hu) - Page 125: Before the line “
x == 7”, there should be a line “x == 1”. - Page 144: “some some distortion and noise” should be “some distortion and noise” (duplicate word). (Credit: Tina Hu)
- Page 150: the parity-bit definition is reversed. The text reads, “In even parity, the transmitter sends a logical true 1 parity bit if the number of true 1 bits in the data is even, and a logical false 0 when it is odd.” It should read, “In even parity, the transmitter sends a logical false 0 parity bit if the number of true 1 bits in the data is even, and a logical true 1 when it is odd. The parity bit ensures that the total number of 1 bits, including the parity bit, is even for even parity.” (Credit: Tina Hu)
- Page 152: “data terminal equivalent (DTE)” should be “data terminal equipment (DTE)”. (Credit: Tina Hu)
- Page 172, Problem 3.1: “How long with it take” should be “How long will it take”. (Credit: Tina Hu)
-
Page 217, figure 4.17a: both transitions to state A should include that output O goes to 0. The updated figure is below (Credit: Sawyer Fuller):
- Pages 219 and 221:
stateB()function should resetKto be0ifRis pressed. (Credit: Sawyer Fuller) -
Page 219, table 4.3: R is irrelevant input in rows A and C. The updated table is below (Credit: Sawyer Fuller):

- Page 228, Lab 4 (Pulse-Width Modulation): “the percentage of time that the DIO channel is low” should be “the percentage of time that the DIO channel is high” — since
run = 1is the state in which current flows through the motor. (Credit: Tina Hu) - Page 259, last line: “Consider the state 01, which can only have occurred with $(S, R) = (0, 1)$” should be “Consider the state 01, which normally occurs from $(S, R) = (0, 1)$” (state 01 can also persist when $(S, R) = (0, 0)$). (Credit: Tina Hu)
- Page 260, paragraph 2, line 4: “which must therefore change its output to $Q = 0$” should be “$Q = 1$”. (Credit: Tina Hu)
- Page 275:
irqThread0.irqNumber = IrqNumbershould beirqThread0.irqNumber = irqNumber. (Credit: Sawyer Fuller) -
Page 278: In figure 5.16, instead of the output of the $\alpha$ NAND gate, it should be the output of the $\beta$ NAND gate that is connected to
DIO0. The corrected figure is shown below (Credit: Sawyer Fuller): - Page 287: in the SAR recursion $x(i) = x(i-1) + \mathrm{sgn}(x(i-1) - x_\mathit{IN}) / 2^i$, the
+should be-(so the estimate converges toward $x_\mathit{IN}$). (Credit: Tina Hu) - Page 297: $n > 0$ should be $n \ge 0$. (Credit: Sawyer Fuller)
- Page 301:
v_out = Aio_Write(&AOC1, v_out);should beAio_Write(&AOC1, v_out);(no assignment), sinceAio_Write()returnsvoid. (Credit: Tina Hu) - Page 304:
timeoutValue = 5;is better astimeoutValue = 500;, in keeping with the lab exercise. (Credit: Sawyer Fuller) - Page 308, Problem 6.1: “assuming that the input $x(n) = 1$ for all $n$ and the output $y(n) = 0$ for all $n < 0$” should specify the input’s boundary too: “assuming that the input $x(n) = 1$ for all $n \ge 0$ and $x(n) = 0$ for all $n < 0$, and the output $y(n) = 0$ for all $n < 0$”. (Credit: Tina Hu)
- Page 309, Problem 6.8: “The sampling begins at an arbitrary and unknown time $t_0$” — “$t_0$” should be omitted (in figure 6.16, $t_0$ marks the wave’s start, not the sampling start). (Credit: Tina Hu)
- Page 316, Problem L6.5: “(AC coupled)” should be “(DC coupled)”. (Credit: Tina Hu)
- Pages 322 and 354, equation (7.4): $T_s = 4 / (\zeta \omega_n)$ should be $T_s \approx 4 / (\zeta \omega_n)$ (the settling-time formula is an approximation). (Credit: Tina Hu)
- Page 335: “If there are surviving factors of $s$ in the numerator of the open-loop transfer function, called differentiators, the steady-state error will be infinite” — “infinite” should be “unity” (with $K_p \to 0$, the step-input steady-state error is $1 / (1 + 0) = 1$). (Credit: Tina Hu)
- Page 353, equation (7.31): the numerator $\bar{s} + Z$ should be $\bar{s} - Z$ (so the open-loop integral-compensator zero is at $\bar{s} = Z$, consistent with the negative-real-axis zero locations shown in figure 7.20). (Credit: Tina Hu)
- Page 356: Figure 7.21(a): the zero shown at $-40$ on the real axis should not be there; the zero should be at $-\infty$ on the real axis. (Credit: Tina Hu)
- Page 360, just before equation (7.35): “$\psi \in (0, 1)$” should be “$\zeta’ \in (0, 1)$” (the underdamped condition constrains the damping ratio, not the design-point location). (Credit: Tina Hu)
- Page 361, equation (7.40): in $\zeta’ = -\Re(\psi) / (Z(B/J + 2\Re(\psi)))$, the denominator is missing a square root and should be $\sqrt{Z(B/J + 2\Re(\psi))}$ (matching $\omega’_n$ from the same equation). (Credit: Tina Hu)
- Page 402: “set
itime = -1and*iseg = -1to initialize its operation” —*isegshould beiseg(the initialization happens in the caller’s scope before&isegis passed toSramps()). (Credit: Tina Hu)