On Sun, Dec 30, 2012 at 3:49 PM, Pedro Giffuni <p...@apache.org> wrote: > > > ----- Messaggio originale ----- >> Da: Rob Weir > ... >>> >>> Please feel free to contribute a spreadsheet that calculates the edge >>> cases. Any contribution of that kind is welcome, and that's why this >> list >>> exists. >>> >> >> Well, what does boost use for its own testing? They must do some sort >> of testing? Is there something we can easily convert into a >> spreadsheet? That would help in two ways. since we could test the >> existing implementation against the same test cases, to see if there >> actually are any issues. I assume that would be good to know. >> > > This is not something one checks by grabbing someone else's testsuite, > it depends on the specific function you want to test. > > Please check the excellent boost documentation: > http://www.boost.org/doc/libs/1_52_0/libs/math/doc/sf_and_dist/html/index.html > > > I don't think we have equivalent studies over our native versions :(. > >> >> More bugs come from overconfidence than from a respectful humility and >> realization that the work we do is critical for millions of users and >> that we should do everything possible to ensure that our code is >> tested by more than just our own personal feelings of satisfaction. >> IMHO. >> > > Rather than overconfidence we are having respectful humility and realization > that our homebrew implementations don't really compare against the boost > versions. >
So there are two things here: 1) All the junk out to the 12th decimal place that might matter to a few people and which might be improved by moving to boost 2) The edge stuff where we can very well break real world spreadsheets if we're not careful. This is not entirely about the 12th decimal place. I was one of the co-authors of the OpenFormula specification used in ODF. There is more there than just mathematical fact. There are a lot of conventions, purely pragmatic conventions, involved in spreadsheet formulas, and we need to get those right as well. For example, take the POWER() function. POWER(x;y) == x^y. So what is POWER(0;0) ? I'm sure boost returns something there. But is it the same as AOO 3.4.1 returns? And does it conform to OpenFormula? Another example. We have ISERR() and ISNA() functions. We make a distinction between "Not a number" (the result of 0/0) and other errors. A spreadsheet user may have error handling logic that is sensitive to this. So we need to make sure that changing in implementation don't introduce changes in what errors are returned. Again, this is a convention, not a mathematical fact that we can just assume boost gets right. So we need to be very careful about how things interact at the level of range and domain errors. NaN, etc. It is possible that AOO 3.4.1 works correctly in some cases purely by accident, because the system routines "do the right thing". Then we switch to a different library and it breaks, even though the library is justifiably correct. So before we attempt a brain transplant with the spreadsheet formulas, let's make sure we're all comfortable with the real-world risk this introduces and have a plan to find (and fix) the bugs this will inevitably introduce. Of course, this is not a demand on you personally, but a challenge for the project overall. Regards, -Rob > > Of course that doesn't mean we should replace everything, but perhaps since > Regina knows this better she can make informed suggestions.. > > Pedro.