Corrigenda for \begin{html}<A HREF="http://www.perfdynamics.com/iBook/ppa_new.html">Perl::PDQ</A>\end{html} book

Corrigenda for Perl::PDQ book

Last updated Nov 1, 2007

Page Spotter Correction
Many  Author The keyword Perl (and several others) is abutted without a space to the next word. This is due to last-minute, rushed editing by me where I inadvertently deleted a necessary tab in a LATEX global.
p.14  J. Purinton Sect. 1.4 last line: The comment about Perl5 not handling 64-bit integers refers to timestamps e.g., time_t in Time::Local, not Perl integers in general.
p.29  W. Baeck Second sentence after Fig. 1.6: "It would useful..." s.b. "It would be useful..."
p.44  Author In Fig. 1.14: "Congested local minimum" s.b. "Congested global minimum". Caption is correct.
p.56  W. Baeck Example 2.4: first line: "... pulls 20,108 tmpC". The unit s.b. tpmC
p.56  J. Purinton Example 2.4: Text is totally shredded. Corrected text as PDF file to preserve formatting.
p.60  D. Walter Line after eqn.(2.16) "Here, Q = 25 cars ...." s.b. 75 cars
p.66  W. Baeck Example 2.7: "50 x 0.010 = 51% busy" s.b. 50% busy
p.76  P. Puglia Tables: Some units are incorrect. 'pps' s.b. 'cpm', and 'ms' s.b. 'min'.
p.71  E. Juan Perl code comment, 6 lines up from bottom of page: # Service time s.b. # Residence time
p.79  Author Eqn.(2.62) The numerator after the 2nd '=' sign s.b. 1, not ρm−1
p.81  Author Eqn.(2.65) First term. Denominator s.b. just (1 − ρ) without the factor m.
p.90  P. Altevogt End of Example 2.13 eqn. s.b. R = 230/0.7636 s − 300 s = 1.21 s
p.100  D. Hagler Sect. 2.9.2: Queueing descriptor 'Pa/Ps/m/B/N/Q' s.b. 'Pa/Ps/m/B/N/D' to match Table 2.6.
p.102  E. Juan See Note 1.1
p.103  E. Juan Fig. 2.26 caption: " ... 2(M/M/2)" s.b. 2(M/M/1)
p.103  E. Juan Para 2, line 4: Fig. 2.44 call out s.b. Fig. 2.14
p.106  E. Juan Line 5 from top: "significan variance ..." s.b. significant ...
p.108  E. Juan Sect. 2.11.4 beginning line 2: Elide 'If'
p.111  E. Juan Sect. 2.11.9 para 2: "... in Table 2.6." s.b. Table 2.7
p.121  M. Marino Below Fig. 3.3: "...can be used a parameter..." s.b. "...can be used as a parameter...".
p.129  E. Juan First line of text: "... Rv = W + S = 1.616 ms" s.b. in seconds (s) units, not milliseconds (ms).
p.129  M. Marino Inside boxed comment bottom of page: "...as though they it were..." s.b. "...as though it were...".
p.134  Author last line: "... which takes care of all that for you, ..." The word `care' is missing.
p.140  P. Altevogt Perl code 2/3 down: $X = ($n / \$rtt); The $n s.b. $N
p.140  Author Perl code: See Note 1.2
p.219  Author Para 2, line 2: "This one way to get reasonable ..." s.b. "This is one way ..."
p.220  J. Purinton Perl code line# 19: Boolean test in if($ArrivalRate > $ServiceCap) {...} s.b. >= to match text.
p.244  Author Perl code variable $w3 is $L3 in text but is correct in download code.
p.247  P. Altevogt Perl code 3 lines from bottom: Insert pdq::SetDemand("dsk", "aggwork", $aggDskDemand); before pdq::Solve(...).
p.253  Author Lines 1 and 7 Perl scalar PRIORITY s.b. $PRIORITY
p.262  P. Altevogt Eqn.(6.2) s.b. (0.0381 × 0) + (0.0857 × 1) + (0.1222 × 2) + (0.7540 × 3) = 2.592
p.306  T. Sych last line: "...usefl..." s.b. "useful"
p.313  T. Sych middle of second paragraph: "...thin..." s.b. "think".
p.324  Author 4th line of text after eqn.(9.2): "...then second..." s.b. "the second".
p.324  P. Altevogt Perl constant $K should stand for 1000, not 1024 (same on p.327).
p.345  P. Altevogt Eqn.(10.1) s.b: RTD = (77.69 + 70.282)/2 = 73.99 ms
p.362  Author Perl code: Dummy node variable not used. Service times for nodes 2 and 3 s.b. same as Table 10.8.
p.365  Author Perl code: See Note 1.3
p.386  Author 1945 probably s.b. 1946. See Note 1.4; which is really an addendum, not an erratum.
p.386  E. Borasky 1953 See Note 1.5
p.386  D. Walter 1961 "John Little ...bares..." s.b. bears
p.394  E. Juan Sect. C.3 2nd last line: "1.35914" s.b. 0.18394 (consistent with Fig. C.1)
p.403  P. Altevogt Tables D.2 and D.3. See Note 1.6
p.416  Author Table G.3, first row: "8 b" Decimal unit s.b. "1 b".
p.417  T. Becker Solution 1.2: Last line "LAN" s.b. WAN
p.418  E. Juan Solution 3.1: 'p' and 'q' are switched.

1  NOTES

1.1  Page 102

In items just prior to Section 2.10.1, the Figure and Equation callouts are messed up. They should read:
  1. An M/M/1 queue ...(Fig. 2.24) ... (2.35) ...

  2. An M/M/2 queue ...(Fig. 2.16) ... (2.63) ...

  3. A multiqueue (Fig. 2.14) ... (2.44) ...

1.2  MVA Approximation

The independent Perl subroutine on p. 140 is hosed. The following code works correctly and will be included with the next PDQ release, in the Perl subdirectory (not the PDQ subdirectory). [NOTE: Since these subroutines are not used by PDQ, the APPROX solution method for pdq::Solve() works as advertized.]
sub approx
{
   # Schweitzer algorithm
   for ($k = 1; $k <= $K; $k++) {
      $Q[$k] = $N / $K; # equi-partition queues initially
   }

   do {
      for ($k = 1; $k <= $K; $k++) {
         $Qprev[$k] = $Q[$k];
         $R[$k] = $D[$k] * (1.0 + $Q[$k] * ($N - 1) / $N);
      }
      
      $rtt = $Z;
      for ($k = 1; $k <= $K; $k++) {
         $rtt += $R[$k];
      }
      $X = $N / $rtt;

      for ($k = 1; $k <= $K; $k++) {
         $Q[$k] = $X * $R[$k];
      }
   }  while (converging())
}

sub converging {
    my $k, $threshold = 0.001; # stopping criterion
   
    # Equivalent of Max_i[|(Qnew_i - Qold_i)/Qnew_i|] pseudo-code 
    # seen in various textbooks
    for ($k = 1; $k <= $K; $k++) {
        $delta = abs($Q[$k] - $Qprev[$k]) / $Q[$k];
        return(1) if($delta > $threshold);
    }
    
    return(0); # must've converged below threshold
}

1.3  Dummy Queues

Chapter 10, code fragmant at bottom of p. 365 should read:
    use constant MAXDUMMIES => 12;
    ...
    $think    = 0.0 * 1e-3;  # free parameter
    $dtime    = 2.2 * 1e-3;  # dummy service time 
    ...
    # Create dummy nodes with their service times ... 
    for ($i = 0; $i < MAXDUMMIES; $i++) {
        $dnode = "Dummy" . ($i < 10 ? "0$i" : "$i"); # 2-digit number
        $pdq::nodes = pdq::CreateNode($dnode, $pdq::CEN, $pdq::FCFS);
        pdq::SetDemand($dnode, $work, $dtime);
    }

1.4  Presper Eckert

Presper Eckert was interviewed in 1989 about the development of the ENIAC computer. The interview was published in ComputerWorld on the occassion of the ENIAC's 60-th birthday. He has the following to say about von Neumann's contribution:
He (von Neumann) came and looked at our stuff and went back to Princeton and wrote a long document about the principles. He gets a lot of credit but the inventions were ours. Someday I'll write a book on who really invented the computer. It wasn't Atanasoff or Von Neumann. We did it.
It looks to me like Eckert and Mauchly (being engineers) did not fully appreciate what von Neumann did, and vice versa.

1.5  IBM 701

> Comments: On page 386 you state:
> 
> "The IBM 701 was designed exclusively for business data processing. It was a
> vacuum tube computer programmed with punch cards."
> 
> My recollection is that there were two IBM computer lines, the 701 - 704 - 709
> - 7090 - 7094 line of *scientific* computers, and the 702 - 705 - 7080 line of
> *commercial* computers. The scientific line had a 36 bit binary word-addressed
> architecture and the commercial line had a character-based architecture. I
> don't know a whole lot about the commercial line, but I did earn a living
> programming 7094s early in my career.
> 
> All were true Von Neumann machines, with programs and data stored in the same
> random access memory. They were not "programmed with punch cards" but did have
> card readers. The 701 and 702 had Williams tube (CRT-based) RAM, IIRC, and
> succeeding members of the lines had magnetic core RAM. The 7080 and 7090 and
> later had solid-state logic; predecessors had vacuum tube logic.

1.6  Page 403

Table 1: Corrected Table D.2
n Data Ranked Emp Thy Fn Fn−1 D+ D
1 11.72 1.43 0.1220 0.1797 0.1667 0.0000 -0.0130 0.1797
2 10.43 4.12 0.3515 0.4348 0.3333 0.1667 -0.1015 0.2682
3 8.02 7.58 0.6468 0.6500 0.5000 0.3333 -0.1500 0.3167
4 7.58 8.02 0.6843 0.6707 0.6667 0.5000 -0.0040 0.1707
5 1.43 10.43 0.8899 0.7642 0.8333 0.6667 0.0692 0.0975
6 4.12 11.72 1.0000 0.8027 1.0000 0.8333 0.1973 -0.0306
Table 2: Corrected Table D.3
N 6
Dmax 0.3167
Kcrit 0.7757
p-value 0.7632
α 0.2368



File translated from TEX by TTH, version 3.38.
On 1 Nov 2007, 13:56.