Want to read Slashdot from your mobile device? Point it at m.slashdot.org and keep reading!

 



Forgot your password?
typodupeerror
×
Programming Books Media Book Reviews IT Technology

Math Toolkit for Real-Time Programming 153

oxgoad writes "Need a closed-form algorithm to derive square roots? Stymied by strange and scary results from your favorite compiler's math library? Math Toolkit for Real-Time Programming by Jack W. Crenshaw attempts to shed some numerical light. Read on for the goods." Oxgoad's review continues below.
Math Toolkit for Real-Time Programming
author Jack W. Crenshaw
pages 466
publisher CMP Books
rating 8
reviewer oxgoad
ISBN 1929629095
summary A casual discussion of algorithms ranging from abs to numerical calculus.

Who & What

Jack W. Crenshaw, Ph.D. (Physics) wrote his first computer program in 1956 for an IBM 650. He has been working with real-time software for embedded systems ever since -- contributing several years to NASA during the Mercury, Gemini, and Apollo programs. In addition to other activities, he is currently a contributing editor for Embedded Systems Programming magazine and author of the Programmer's Toolbox column.

In Math Toolkit for Real-Time Programming, his effort is focused on describing the pitfalls of vendor-provided math libraries and providing robust replacements. In section one he gives a thorough overview of constants and the various manners in which to declare them, naming conventions, and error handling. As the work progresses, in section two, he builds a library of proven algorithms ranging from square roots to trigonometrical functions to logarithms. Did you suffer through calculus in college with a barely passing grade? Section three will teach you more about numerical calculus in a half-hour than you may have learned in three semesters.

Kudos

Math Toolkit is written in an easy to understand anecdotal manner. You might be tempted to think that the author was animatedly relating the history of computing square roots while having lunch with you. This method works very well and keeps what could be a rather heavy subject from becoming too much of a burden. Most chapters have historical tidbits liberally sprinkled throughout.

Even if college algebra left you with post-traumatic stress disorder, you will not have any trouble with section two. Indeed, you may find yourself intently following the author on the trail of the perfect arctangent algorithm -- much as a sleuth on the trail of a villain.

The depth of knowledge shown, and its presentation, is exceptional. The author's years of experience are evident in his self-confident writing style. You will rarely see a clearer overview of numerical calculus.

Quibbles

The cover of the book states: "Do big math on small machines." This, combined with the Real-Time Programming phrase in the title, might lead one to believe that the book's primary audience is intended to be the embedded microcontroller crowd. Sadly, not so. There is very little here for the die-hard assembler programmer other than some very handy integer square root and sine routines - and these examples are in C++. Based on the cover, I would have liked to see a greater emphasis on processors lacking a floating point unit. Also, some code examples in pseudo-assembler would have been welcome, as the author chose C++ as the language of choice for all examples.

Crimes

As is so often the case nowadays, there are various typographical errors scattered throughout. This seems to be an epidemic in current technical books. Fortunately, it didn't affect the readability of Math Toolkit.

Conclusions

I believe Math Toolkit for Real-Time Programming would be a great, perhaps mandatory, addition to the bookshelf of anyone that is involved in writing code that has a heavy math component. Other than the somewhat misleading cover, I cannot find anything truly negative to say about this work. Congratulations are in order to Mr. Crenshaw on a job well done.

The book also includes a CD-ROM of all example source code. In reality, to get the best benefit from the book, you should mostly ignore the CD-ROM and work through the examples. To quote the author: "Never trust a person who merely hands you an equation."

Table of Contents

  1. Getting The Constants Right
  2. A Few Easy Pieces
  3. Dealing with Errors
  4. Fundamental Functions
  5. Getting the Sines Right
  6. Arctangents: An Angle-Space Odyssey
  7. Logging in the Answers
  8. Numerical Calculus
  9. Calculus by the Numbers
  10. Putting Numerical Calculus to Work
  11. The Runge-Kutta Method
  12. Dynamic Simulation
  • Appendix A: A C++ Tools Library

Disclosure

I received a review copy of this book from the publisher. Thus, my loyalties and opinions may be completely skewed. Caveat Lector.


You can purchase Math Toolkit for Real-Time Programming from bn.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.

This discussion has been archived. No new comments can be posted.

Math Toolkit for Real-Time Programming

Comments Filter:
  • by typical geek ( 261980 ) on Thursday October 10, 2002 @10:25AM (#4423670) Homepage
    I remember when having a solid math background was de reguire for a programmer. Of course, I'm talking the mid 80's, engineering school and Fortran, so I'm kind of krufty.

    I wonder how much better could we be if coders knew basic math, if they know how those little bitty chips actually computed the sine of something instead of assuming it works. We would probably have rock solid operating systems without all the glitzy GUI stuf..
  • flimsy review (Score:5, Insightful)

    by rfischer ( 95276 ) on Thursday October 10, 2002 @10:26AM (#4423676)
    How does the book compare to the classics: Numerical Recipes, The Art of Computer Programming, etc?
  • by Hayzeus ( 596826 ) on Thursday October 10, 2002 @10:30AM (#4423702) Homepage
    However, with the the maturity of operating systems, many of them now include device drivers, APIs, objects and other goodies that insulate the average programmer from the hassle of issues like latency. So my question is, other than good academic study, would it pay for the rest of us to spend the $$ on such a book?

    The above generally doesn't apply to anyone doing serious embedded work with small and midrange microcontrollers. Often an operating system is thin to non-existent on these platforms. Some of the lower-range parts may have a 2-byte hardware stack, 28 bytes of RAM and maybe 512 bytes of program memory. Obviously, you won't be doing much sophisticated numerical work on these smallest of microcontrollers, but for more midrange parts, I've found this book to be a godsend.

    The book is not aimed at PC users.

  • by wunderhorn1 ( 114559 ) on Thursday October 10, 2002 @10:59AM (#4423878)
    Well yeah, man, if you want to be grinding out php and html or doing admin work for the rest of your life, sure, there's no reason to get a higher education, and if you're happy with what you're doing then that's great.

    But to get a job writing computer graphics software, or audio processing, or designing any sort of embedded hardware, knowledge of advanced math is required. The people who want to do this kind of work pursue higher educations, and if they enjoy what they're doing then that's great, too.

  • by Anonymous Coward on Thursday October 10, 2002 @11:00AM (#4423881)
    I'd agree with the former poster that the industry would be MUCH better off if programmers actually had a clue how to:

    A) Create superb programs
    B) Fix them
    and
    C) Put some thought into the design so that others can use-, understand and change it easily.

    not

    Just hack something up and yell 'FINISHED!' when it seems to run "Good enough".
  • by Anonymous Coward on Thursday October 10, 2002 @11:13AM (#4423979)
    You know, it's really easy to write complete bullshit on slashdot and get +5, so to add a little challenge, good trolls add a small self-contradition to signals to other trolls that their post is a troll. Kudos to PhysicsGenius for mastering the art of good trolling to such precision!
  • by Phronesis ( 175966 ) on Thursday October 10, 2002 @11:23AM (#4424098)
    I am currently trying to get a data-acquisition computer to keep up with a five thousand frame-per-second video feed [redshirtimaging.com] while doing processing between the frames. Hard real-time is a real issue for me.
  • by urbi ( 171156 ) on Thursday October 10, 2002 @11:25AM (#4424136)
    Of course. Real time doesn't mean low latency.
    It means predictable (bounded) latency! It's a
    secondary issue if that latency is low or high.
    My Linux is reasonably fast, but it's still far from real time: each time I touch my xawtv window, the whole machine freezes for a second...
  • by dubious9 ( 580994 ) on Thursday October 10, 2002 @11:27AM (#4424157) Journal
    I won't bash you like some of the other replies to your post, nor will I give you hope that you can advance past a limited set of jobs in the IT industry.

    College (esp for computer engineering and CS) fundamentally teaches you:

    1. How to solve problems

    2. A toolset (ie math, algorithms) to go about solving those problems

    True, you may not ever use calculus, but as a computer scientist you will use matrix theory because it is the best way to solve some problems.

    This is not only for scientific/research either. If you try to write anything performance related, you'll have to use higher math. Computer science ain't easy.

    Let me stress again that college teaches you about your subject matter and how to solve problems for it. You can come up with this stuff by yourself, in my experience only a tiny percent working without a college degree will ever accrue enough to offset what they missed in college.
  • by Anonymous Coward on Thursday October 10, 2002 @12:52PM (#4425008)
    programming has little use for math.
    Somewhere in Palo Alto, California, God [stanford.edu] is cringing. Here's why [mit.edu]:
    I am told that the courts are trying to make a distinction between

    mathematical algorithms and nonmathematical algorithms. To a computer
    scientist, this makes no sense, because every algorithm is as
    mathematical as anything could be. An algorithm is an abstract
    concept unrelated to physical laws of the universe.

    Nor is it possible to distinguish between "numerical" and
    "nonnumerical" algorithms, as if numbers were somehow different from
    other kinds of precise information. All data are numbers, and all
    numbers are data.
    So maybe most of the math is trivial, but that's not the same as being useless... :-p
  • by Fourier ( 60719 ) on Thursday October 10, 2002 @01:22PM (#4425290) Journal
    Interesting read. Still, I would challenge all these numerical specialists to come up with a tome that is equally comprehensive and equally readable by scientists without extensive numerical analysis training. The book has been so successful because it hits the target audience perfectly.
  • by naasking ( 94116 ) <naasking@gmaEULERil.com minus math_god> on Thursday October 10, 2002 @01:28PM (#4425346) Homepage
    Perhaps you should rephrase these statements to "programming often has little to do numerical math". Programming has everything to do with Discrete math (which is formal reasoning and logic).

  • by Daniel Dvorkin ( 106857 ) on Thursday October 10, 2002 @01:29PM (#4425356) Homepage Journal
    Your code may do the job, but does it do the job efficiently? And if it didn't, how would you know?

    I changed majors from CS to Mathematics halfway through because I realized that programming is easy; you can always learn a new language or a new technique by picking up the appropriate O'Reilly book on the subject. But writing good programs -- programs that are robust, that scale well, that do as much as possible as quickly as possible -- is really applied math. And math is hard.

    You simply have no idea how much you don't know, and with the attitude you have, you probably never will.
  • Math ~= Calculus (Score:5, Insightful)

    by jefu ( 53450 ) on Thursday October 10, 2002 @01:47PM (#4425537) Homepage Journal
    Many of the responders to this claim loudly and insistently that they've been programming for years and have never used any math. This is one of those perennial topics - I've seen it on the usenet and on web sites more times than I'd like to admit.

    But by "math" the reference is almost always to calculus.

    But math is not just calculus.

    Math includes (and this is a MINIMAL list :

    • algebra Every program using symbols to represent things that might vary is using algebra. Algebra isnt just manipulating big expressions to find values of x and y - it is really about using names to refer to values. (For example x=y+1 is fundamentally an algebraic expression.

      boolean logic Using logical expressions and understanding what they do is just the predicate calculus. Using logic languages (prolog primarily) is, well, logic.

      Linear Algebra Try to program more than minimal graphics without linear algebra.

      The structure of numbers computing square roots and the like. This kind of computing also typically involves calculus and its relatives

      Calculus many parts of computational mathematics, including things like square roots, sin/cos and the like. Also, finding tangents and normals to surfaces which is a big part of reflection models in graphics. The logic involved is also used in the analysis of algorithms.

      logical reasoning Every time someone writes a loop or a recursive function, they are essentially using mathematical induction (albeit informally). Propagation of pre/post conditions (not just in procedure calls, but on the statement to statement level is also logical reasoning (and informal proofs).

      Fourier analysis Fourier analysis is essential in image manipulation (including compression), graphics in general, Most algorithms involving sound processing also rely on fourier analysis

      Graph Theory Where doesn't graph theory show up? Dependency graphs, path algorithms of all sorts. Trees are graphs. Garbage collection involves graph theory. Programs are (on several levels) graphs. The internet as a network is a graph. Websites are graphs (and it can be interesting and revealing to look at them as such).

      Number Theory Cryptography!

    And there's more - check out Glassner's "Digital Image Synthesis", or Knuth's "Art of Computer Programming", - find places where mathematics is not mentioned. Let alone such things as wavelets, the Mandelbrot set, grammars, text (or UI) layout, automata (and on, and on, and on...). I can show you a very hard mathematical problem (which I'm still working on) based on an algorithm you all know, but that is often coded incorrectly.

    If you're not doing any of these things, you may be programming, but you're probably not programming well.

    Juris Hartmanis said (half jokingly) in his Turing Award lecture that "Computer Science is the engineering of mathematics" I think its about as good a definition as any I have ever heard.

Living on Earth may be expensive, but it includes an annual free trip around the Sun.

Working...