On 7 September 2011 10:46, Gilles Sadowski <[email protected]> wrote:
> On Wed, Sep 07, 2011 at 12:42:06AM +0100, sebb wrote:
>> On 7 September 2011 00:04, Gilles Sadowski <[email protected]> 
>> wrote:
>> > Hello.
>> >
>> >> Modified: 
>> >> commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/FastMath.java
>> >> URL: 
>> >> http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/FastMath.java?rev=1165846&r1=1165845&r2=1165846&view=diff
>> >> ==============================================================================
>> >> --- 
>> >> commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/FastMath.java
>> >>  (original)
>> >> +++ 
>> >> commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/FastMath.java
>> >>  Tue Sep  6 21:06:58 2011
>> >> @@ -74,31 +74,6147 @@ public class FastMath {
>> >>      /** Napier's constant e, base of the natural logarithm. */
>> >>      public static final double E = 2850325.0 / 1048576.0 + 
>> >> 8.254840070411028747e-8;
>> >>
>> >> +    private static final int EXP_INT_TABLE_MAX_INDEX = 750;
>> >> +    private static final int EXP_INT_TABLE_LEN = EXP_INT_TABLE_MAX_INDEX 
>> >> * 2;
>> >> +
>> >>      /** Exponential evaluated at integer values,
>> >> -     * exp(x) =  expIntTableA[x + 750] + expIntTableB[x+750].
>> >> +     * exp(x) =  expIntTableA[x + EXP_INT_TABLE_MAX_INDEX] + 
>> >> expIntTableB[x+EXP_INT_TABLE_MAX_INDEX].
>> >>       */
>> >> -    private static final double EXP_INT_TABLE_A[] = new double[1500];
>> >> +    private static final double EXP_INT_TABLE_A[] =
>> >> +    {
>> >> +        +0.0d,
>> >> +        Double.NaN,
>> >
>> > [More than 6000 lines stripped.]
>> >
>> > Wouldn't it be advantageous to store those tabulated data in separate
>> > Java files? E.g.
>> > ---
>> > class ExpIntTables {
>> >    static final double[] A = {
>> >      // Very long table.
>> >    };
>> >    static final double[] B = {
>> >      // ...
>> >    };
>> > ---
>> >
>> > And in "FastMath.java":
>> > ---
>> > public class FastMath {
>> >    private static final double[] EXP_INT_TABLE_A = ExpIntTables.A;
>> >    private static final double[] EXP_INT_TABLE_B = ExpIntTables.B;
>> > }
>> > ---
>>
>> That would be possible, but would require the tables to be
>> non-private, increasing the theoretical risk of accidental changes.
>
> I know, but having "package" access level reduces the risk to our own
> mistakes, similar to any bug we can introduce when writing code.

Except that there are now many more files that may need to be debugged.

> One can also assumes that the tables  will need much less changes (if
> at all) than actual code in "FastMath.java"; so having them in separate
> files could reduce the risk of messing with them... And of course, there is
> the practical advantage of not having to load/scroll 6000+ lines in orde to
> have a look at the code.

We could move the tables and disabled setup code to the end of the source file.

Some of the setup code could be moved into a separate class - e.g. the
slowExp, slowSin and SlowCos methods use the FACT table, which is not
needed elsewhere.

> By the way, how much faster is now the first use of a method from
> "FastMath"?

Not checked. Perhaps the OP of the JIRA will be able to help there.

That probably needs to be the next step.

>
> Regards,
> Gilles
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to