
Paul A Bristow <pbristow <at> hetp.u-net.com> writes:
| (And BTW, it did find several bugs in my | computations by flagging dimensions problems!)
Can you elaborate a little on the value of using a dimensional analysis by sharing some of these with us?
One example I was able to dig up was in approximating a function's derivatives using finite differences. In simplified form, my code had looked something like this: length f( time t ); ... t3_quantity t = // some time value t3_quantity dt = // some time value ... t3_quantity x = f(t); t3_quantity xdot = f(t+dt) - x; // incorrect! ... velocity v = xdot; // runtime error caught here! The erroneous line should have been: t3_quantity ydot = ( f(t+dt) - x ) / dt; I had left out the division, which changes the units. Incidentally, when using t1_quantity or t2_quantity types, the error would be caught at compile-time, and on the line actually containing the error: time t = // some time value time dt = // some time value ... length x = f(t); velocity xdot = f(t+dt) - x; // error here - caught by compiler! (Because these errors are caught at compile-time, and thus usually before the code is checked in, the fixes don't appear in the change history, so I can't produce actual examples I've encountered for those cases.) Another example is my mistake in an earlier post, where I tried to show code taking sqrt(acceleration/length) to get a time value. But actually it gives a frequency, so if the error were not corrected I'd get the reciprocal of the value I want. Dimensional analysis would prevent the invalid assignment from occurring. -- Leland