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 <b...@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.dunn...@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 <b...@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.dunn...@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 <b...@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, e-mail: dev-unsubscr...@commons.apache.org >>>>> For additional commands, e-mail: dev-h...@commons.apache.org >>>>> >>>>> >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >>>> For additional commands, e-mail: dev-h...@commons.apache.org >>>> >>> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >> For additional commands, e-mail: dev-h...@commons.apache.org >> > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > For additional commands, e-mail: dev-h...@commons.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org