File a JIRA and attach a patch with test case. That's the best bet
for getting your stuff included.
On Tue, Jun 8, 2010 at 12:46 PM, Bill Rossi <bill@rossi.com> wrote:
>
>
> Thank you,
>
> It would be nice to get it into Java, but I have no idea what the process
> for that is.
>
> I'll package up the code, test case, etc and post a link tonight.
>
>
> On Tue, 8 Jun 2010, James Carman wrote:
>
>> That's what I was thinking. We could include it in Commons Math, but
>> it'd be great to see it make it into the language itself (in about 10
>> years as these things work).
>>
>> On Tue, Jun 8, 2010 at 11:39 AM, Ted Dunning <ted.dunning@gmail.com>
>> wrote:
>>>
>>> Bill,
>>>
>>> This looks like nice work.
>>>
>>> Have you considered contributing the code back to Java itself?
>>>
>>> On Tue, Jun 8, 2010 at 8:29 AM, Bill Rossi <bill@rossi.com> wrote:
>>>
>>>>
>>>> I've looked at StrictMath, generally Math appears to delegates to
>>>> StrictMath. StrictMath is implemented by the C fdlibm library.
>>>>
>>>> This is what I've implemented to date, the code will compile and run
>>>> on JDK 1.4 and later. It may work on older JDKs, but I don't have them
>>>> available for testing. Note that functions like expm1 are not available
>>>> in earlier JDKs.
>>>>
>>>> public class FastMath extends java.lang.Object{
>>>> public FastMath();
>>>> public static double exp(double);
>>>> public static double expm1(double);
>>>> public static double log(double);
>>>> public static double log1p(double);
>>>> public static double log10(double);
>>>> public static double pow(double, double);
>>>> public static double sin(double);
>>>> public static double cos(double);
>>>> public static double tan(double);
>>>> public static double atan(double);
>>>> public static double atan2(double, double);
>>>> public static double toRadians(double);
>>>> public static double toDegrees(double);
>>>> public static double abs(double);
>>>> public static double ulp(double);
>>>> public static double floor(double);
>>>> public static double ceil(double);
>>>> public static double rint(double);
>>>> public static long round(double);
>>>> static {};
>>>> }
>>>>
>>>> Performance test gives these results:
>>>>
>>>> Function Time Result Function
Time
>>>> Result
>>>>
>>>>
>>>> 
>>>> StrictMath.log 967 1.5118099917827207E8 FastMath.log 553
>>>> 1.5118099917827207E8
>>>> StrictMath.pow 3199 4.6455095486440872E16 FastMath.pow 1967
>>>> 4.645509548644088E16
>>>> StrictMath.exp 1079 2.2025454782076317E10 FastMath.exp 562
>>>> 2.2025454782076317E10
>>>> StrictMath.sin 1151 1839071.8010869955 FastMath.sin 766
>>>> 1839071.8010869955
>>>> StrictMath.cos 1173 544020.191353572 FastMath.cos 665
>>>> 544020.191353572
>>>> StrictMath.tan 1568 5.024600819552688E7 FastMath.tan 1081
>>>> 5.024600819552688E7
>>>> StrictMath.atan 1079 1.2403715749052648E7 FastMath.atan 902
>>>> 1.2403715749052648E7
>>>> StrictMath.expm1 727 9899999.500018543 FastMath.expm1 773
>>>> 9899999.500018543
>>>>
>>>> This table shows execution time for 10,000,000 calls in milliseconds.
>>>> The
>>>> result printed is there to prevent the JIT from optimizing away the
>>>> calculation entirely.
>>>>
>>>> Note that some functions such as exp are nearly twice as fast. I've
>>>> seen
>>>> it 3 times faster on different processors. The preformance varies by
>>>> the
>>>> relative speed of calculation vs memory lookups.
>>>>
>>>> The functions are implemented as tables of values in extra precision
>>>> (approx 70 bits), and then interpolated with a minimax polynomial.
>>>>
>>>> Typical test code:
>>>>
>>>> x = 0;
>>>> time = System.currentTimeMillis();
>>>> for (int i=0; i<10000000; i++)
>>>> x+=StrictMath.exp(i/1000000.0);
>>>> time = System.currentTimeMillis()  time;
>>>> System.out.print("StrictMath.exp "+time+"\t"+x+"\t");
>>>>
>>>> x = 0;
>>>> time = System.currentTimeMillis();
>>>> for (int i=0; i<10000000; i++)
>>>> x+=FastMath.exp(i/1000000.0);
>>>> time = System.currentTimeMillis()  time;
>>>> System.out.println("FastMath.exp "+time+"\t"+x);
>>>>
>>>> To test accuracy, I'd compute results and compare them to an aribitrary
>>>> precision math library.
>>>>
>>>>
>>>> On Tue, 8 Jun 2010, James Carman wrote:
>>>>
>>>> Have you tried looking at StrictMath?
>>>>>
>>>>> On Tue, Jun 8, 2010 at 10:44 AM, Ted Dunning <ted.dunning@gmail.com>
>>>>> wrote:
>>>>>
>>>>>> Bill,
>>>>>>
>>>>>> Which functions do you have?
>>>>>>
>>>>>> Anything more than the standard sin, cos, exp and log?
>>>>>>
>>>>>>
>>>>>> On Tue, Jun 8, 2010 at 6:52 AM, Bill Rossi <bill@rossi.com>
wrote:
>>>>>>
>>>>>> I have developed over the past year a set of elementary functions
>>>>>>>
>>>>>>> similar
>>>>>>> to those in java.lang.Math, but with the following characteristics:
>>>>>>>
>>>>>>> * Higher performance.
>>>>>>> * Better accuracy. Results are accurate to slightly more that
+/
>>>>>>> 0.5
>>>>>>> ULP.
>>>>>>> * Pure Java. The standard Math class is impleneted via JNI,
and thus
>>>>>>> takes
>>>>>>> a performance hit.
>>>>>>>
>>>>>>>
>>>>>>
>>>>> 
>>>>> To unsubscribe, email: devunsubscribe@commons.apache.org
>>>>> For additional commands, email: devhelp@commons.apache.org
>>>>>
>>>>>
>>>>
>>>> 
>>>> To unsubscribe, email: devunsubscribe@commons.apache.org
>>>> For additional commands, email: devhelp@commons.apache.org
>>>>
>>>
>>
>> 
>> To unsubscribe, email: devunsubscribe@commons.apache.org
>> For additional commands, email: devhelp@commons.apache.org
>>
>
>
> 
> To unsubscribe, email: devunsubscribe@commons.apache.org
> For additional commands, email: devhelp@commons.apache.org
>

To unsubscribe, email: devunsubscribe@commons.apache.org
For additional commands, email: devhelp@commons.apache.org
