Hi, I have recently started to update the users guide on special functions, providing accuracy measurements of our implementations. To get these figures, I carried out extensive comparisons with reference values computed with Maxima, and 128 decimal digits. I also wrote a Java command-line app to automatize the process. Briefly speaking, the reference values computed with Maxima are saved as a binary file - for a unary function f(x), the data is stored as follows x[0], f(x[0]), x[1], f(x[1]), ... - for a binary function f(x, y), the data is stored as follows x[0], y[0], f(x[0], y[0]), x[1], y[1], f(x[1], y[1]), ... - and similar storage pattern for a n-ary function.
The signature of the function to be tested can be arbitrary, provided all its arguments are of primitive type: the app will manage to read the reference values. The app then computes for each t-uple (x[i], y[i], ...) the Commons-Math value of f(x[i], y[i], ...) and the error in ulps. This error is transmitted to a SummaryStatistics, which is printed on the standard output when the end of the input file is reached. The app also writes a binary output file, where the data is stored as follows x[0], y[0], reference value of f(x[0], y[0]), CM value of f(x[0], y[0]), error in ulps, ... this binary file can then be plotted if necessary in order to locate the areas where the accuracy is at its worst. The app takes a properties file as input, here is an example method=org.apache.commons.math3.special.Gamma.logGamma signature=double inputFileMask=logGamma-%02d.dat outputFileMask=logGamma-out-%02d.dat from=1 to=5 by=1 The "method" key is the fully qualified name to the function to be validated. Requirements on this function are - static - returns double - takes only primitive arguments The "signature" key is necessary to distinguish between functions with same name. In case there are multiple arguments, the value of this key should read e.g. "double, double" "inputFileMask" and "outputFileMask" are the file names of the input and output binary files. In order to be able to handle multiple files in a row, indexed file names can be used, the format for the indexed file names must then follow the syntax of String.format(). "from" is the value of the first index (inclusive), "to" is the value of the last index (exclusive), "by" is the increment. This app is very simple, but it could prove useful to anyone implementing a new special function in CM. Therefore, I was wondering what would be the best way to include it in our library. Also, I would like people to be able to check all the figures I state on the website. Therefore, I would like to provide all the reference data I've used so far (I have more in store, not yet used to update the users guide). As previously discussed, I gave up binary files for unit tests, which are just "safety guards" to check whether or not the implementation is totally wrong. However, for this extensive analysis of the accuracy, I thought it was better to stick with binary data files. What do you think? Do you think that this app should be provided to all? Same question for reference data files [1]? Thanks for your comments, Sébastien [1] For reference data files, maybe providing the Maxima scripts (and the properties files) would suffice. --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org