mohrezaei opened a new pull request #155:
URL: https://github.com/apache/commons-math/pull/155
I looked at MATH-1549 and the core issue is deep inside the algorithm.
Basically, it's just doing division and subtraction (see
`SimplexTableau.performRowOperations`). That set of operations amplifies small
differences and starting with larger constants will cause problems in a matrix
that's also filled with 1's and -1's. Part of the problem comes from the fact
that floating point multiplication + division does not produce the same result:
```java
double d = 10.0/3.0;
double scale = 100.0;
System.out.println("Diff: "+(d - d * scale / scale)); // prints non-zero
```
The other part of the problem is that the epsilon parameter is not used to
look at the convergence of the solution (alone), but also some internal
computations. That makes reasoning about epsilon very hard.
The proposed solution scales all constants linearly to be closer to 1 by
using double exponent changes to avoid any bit errors.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]