On 10/19/2012 04:16 PM, Phil Steitz wrote:
> On 10/18/12 11:13 PM, Sébastien Brisard wrote:
>> 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.
> 
> I would go ahead and commit all of this stuff in test/maxima,
> similarly to what we have now for R.  It would be great to also have
> similar tests using R, as R is freely available OSS and having two
> different comparison impls would help avoid "we both made the same
> mistake" issues or false negatives.  Make sure to include a text
> file in the top level test/maxima directory that describes how
> everything works, so others can add patches.  Thanks for doing this.

+1

Thomas

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to