[jira] [Commented] (MATH-725) use initialized static final arrays, instead of initializing it in constructors
[ https://issues.apache.org/jira/browse/MATH-725?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=13199279#comment-13199279 ] Gilles commented on MATH-725: - Those arrays cannot be static since their size depends on a parameter (k) passed to the constructor. use initialized static final arrays, instead of initializing it in constructors --- Key: MATH-725 URL: https://issues.apache.org/jira/browse/MATH-725 Project: Commons Math Issue Type: Improvement Affects Versions: 2.2 Reporter: Eldar Agalarov Priority: Minor Fix For: 3.0 Original Estimate: 1h Remaining Estimate: 1h The Well PRNG's implementations have arrays iRm1, iRm2, iRm3, i1, i2, i3. All these arrays are unmodifiable, so we can replace this arrays initialization block final int w = 32; final int r = (k + w - 1) / w; this.v = new int[r]; this.index = 0; // precompute indirection index tables. These tables are used for optimizing access // they allow saving computations like (j + r - 2) % r with costly modulo operations iRm1 = new int[r]; iRm2 = new int[r]; i1 = new int[r]; i2 = new int[r]; i3 = new int[r]; for (int j = 0; j r; ++j) { iRm1[j] = (j + r - 1) % r; iRm2[j] = (j + r - 2) % r; i1[j] = (j + m1) % r; i2[j] = (j + m2) % r; i3[j] = (j + m3) % r; } with inline initialized static final arrays. This is much better and faster implementation, freed from unnecessary costly calculations (such as %). Another solution: leave as is, but make all these arrays static. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Commented] (MATH-725) use initialized static final arrays, instead of initializing it in constructors
[ https://issues.apache.org/jira/browse/MATH-725?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=13189860#comment-13189860 ] Gilles commented on MATH-725: - The problem is that arrays are _mutable_. If they are made static, a buggy or malicious subclass of {{AbstractWell}} will be able to affect all instances. We could do that if the arrays are never exposed, i.e. they would become private and their contents must be accessed through methods. Not sure whether it won't be slower in the end... use initialized static final arrays, instead of initializing it in constructors --- Key: MATH-725 URL: https://issues.apache.org/jira/browse/MATH-725 Project: Commons Math Issue Type: Improvement Affects Versions: 2.2 Reporter: Eldar Agalarov Priority: Minor Original Estimate: 1h Remaining Estimate: 1h The Well PRNG's implementations have arrays iRm1, iRm2, iRm3, i1, i2, i3. All these arrays are unmodifiable, so we can replace this arrays initialization block final int w = 32; final int r = (k + w - 1) / w; this.v = new int[r]; this.index = 0; // precompute indirection index tables. These tables are used for optimizing access // they allow saving computations like (j + r - 2) % r with costly modulo operations iRm1 = new int[r]; iRm2 = new int[r]; i1 = new int[r]; i2 = new int[r]; i3 = new int[r]; for (int j = 0; j r; ++j) { iRm1[j] = (j + r - 1) % r; iRm2[j] = (j + r - 2) % r; i1[j] = (j + m1) % r; i2[j] = (j + m2) % r; i3[j] = (j + m3) % r; } with inline initialized static final arrays. This is much better and faster implementation, freed from unnecessary costly calculations (such as %). Another solution: leave as is, but make all these arrays static. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Commented] (MATH-725) use initialized static final arrays, instead of initializing it in constructors
[ https://issues.apache.org/jira/browse/MATH-725?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=13189862#comment-13189862 ] Sebb commented on MATH-725: --- AFAIK, getters will be inlined by optimising compilers. So they won't be noticeably slower than direct access. use initialized static final arrays, instead of initializing it in constructors --- Key: MATH-725 URL: https://issues.apache.org/jira/browse/MATH-725 Project: Commons Math Issue Type: Improvement Affects Versions: 2.2 Reporter: Eldar Agalarov Priority: Minor Original Estimate: 1h Remaining Estimate: 1h The Well PRNG's implementations have arrays iRm1, iRm2, iRm3, i1, i2, i3. All these arrays are unmodifiable, so we can replace this arrays initialization block final int w = 32; final int r = (k + w - 1) / w; this.v = new int[r]; this.index = 0; // precompute indirection index tables. These tables are used for optimizing access // they allow saving computations like (j + r - 2) % r with costly modulo operations iRm1 = new int[r]; iRm2 = new int[r]; i1 = new int[r]; i2 = new int[r]; i3 = new int[r]; for (int j = 0; j r; ++j) { iRm1[j] = (j + r - 1) % r; iRm2[j] = (j + r - 2) % r; i1[j] = (j + m1) % r; i2[j] = (j + m2) % r; i3[j] = (j + m3) % r; } with inline initialized static final arrays. This is much better and faster implementation, freed from unnecessary costly calculations (such as %). Another solution: leave as is, but make all these arrays static. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Commented] (MATH-725) use initialized static final arrays, instead of initializing it in constructors
[ https://issues.apache.org/jira/browse/MATH-725?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanelfocusedCommentId=13189872#comment-13189872 ] Gilles commented on MATH-725: - Fine then. Eldar, Would you provide a patch along those lines (static initializations + getter methods)? Thanks. use initialized static final arrays, instead of initializing it in constructors --- Key: MATH-725 URL: https://issues.apache.org/jira/browse/MATH-725 Project: Commons Math Issue Type: Improvement Affects Versions: 2.2 Reporter: Eldar Agalarov Priority: Minor Original Estimate: 1h Remaining Estimate: 1h The Well PRNG's implementations have arrays iRm1, iRm2, iRm3, i1, i2, i3. All these arrays are unmodifiable, so we can replace this arrays initialization block final int w = 32; final int r = (k + w - 1) / w; this.v = new int[r]; this.index = 0; // precompute indirection index tables. These tables are used for optimizing access // they allow saving computations like (j + r - 2) % r with costly modulo operations iRm1 = new int[r]; iRm2 = new int[r]; i1 = new int[r]; i2 = new int[r]; i3 = new int[r]; for (int j = 0; j r; ++j) { iRm1[j] = (j + r - 1) % r; iRm2[j] = (j + r - 2) % r; i1[j] = (j + m1) % r; i2[j] = (j + m2) % r; i3[j] = (j + m3) % r; } with inline initialized static final arrays. This is much better and faster implementation, freed from unnecessary costly calculations (such as %). Another solution: leave as is, but make all these arrays static. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira