From: Josef 'Jupp' SCHUGT Date: 2004-01-30T05:58:33+09:00 Subject: Re: ruby-math and "why is ** not abelian?" Hi! * Van Jacques: > Why is " Neither (Float, +) nor (Float, *)" a group? The associative law is violated. Using machine numbers (a + b) + c = a + (b + c) does not hold for all machine numbers a, b, c. Proof is by counterexample. Simply Assume a = 1.0 and b, c = 0.6 * eps where eps is the smallest number that added to 1.0 results in something different from 1.0. (a + b) results in 1.0 because b is smaller than eps and so (a + b) + c results in 1.0 as well. (b + c) results in a number larger than eps so a + (b + c) is larger than 1.0. Similar holds for multiplication (it is more complicated so I only sketch the proof): If a is a huge number and b and c are tiny numbers the product of b and c can be zero so that a * (b * c) is zero as well while a * b can still be a number that multiplied by c does not result in zero. To put it that way: The most challenging tasks in numerical mathematics is providing an error estimate. Unfortunately it is one of the most important as well. It is often important to know how precisely a value is known. What happens if one falsely assumes a precision that is not present shows the Mars Polar Impactor. Josef 'Jupp' SCHUGT -- http://oss.erdfunkstelle.de/ruby/ - German comp.lang.ruby-FAQ http://rubyforge.org/users/jupp/ - Ruby projects at Rubyforge -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Germany 2004: To boldly spy where no GESTAPO / STASI has spied before