Version History
  Version 2.4.1 (released 2007/04/25)
 
  
    - added rounding functions round, ceil, and floor
- fixed bug [ 1563324 ] getValueAsObject always returns null after an error
- fixed bug [ 1670974 ] String to double <= comparison message incorrect
- fixed bug [ 1706295 ] Wrong error output when evaluating variables
Version 2.4.0 (released 2006/04/01)
 
  
    - Evaluator now switchable to allow null variable values.
- SymbolTable can now tell java.util.observers when new variables are created.
- Changes in Error handling
- New functions binom(n,i) binomial coeffs, conj(z) - complex conjugate
- Added anti aliasing to Function Plotter applet
- Fixed bug 1177557: log(NaN) returns Complex(NaN,NaN) instead of NaN
- Fixed bug 1061200: Null Pointer in Parser when using non Default constructor
Version 2.3.1 (released 2006/01/27)
  
    - Fixed bug 1046349: bug in sum()
- Fixed broken links in documentation
- Fixed bug 1051988: JEPTester falsely reports "No errors"
- Fixed documentation error 1358815: if - function is documented wrong
- Added more tests for sum function
- Updated build.xml to work with 1.5 JVMs
Version 2.3.0 (released 2004/10/03)
  
    - Switched from Java 1.1 compatibility to 1.2 compatibility
- Documentation updates
- Fixed batch script issues from beta 2
Version 2.3.0 beta 2 (released 2004/09/03)
  
    - 2004/09/11: Renamed angle() function to atan2()
- 2004/04/12: New functions if, str, complex, polar.
- 2004/04/12: The ^ operator is now overloaded to be the cross product for 
      3D vectors as well as power.
- 2004/04/12: Various changes by Richard Morris (see DJEP Version History)
- 2003/08/15: Added new evaluation method that more than doubles evaluation 
      performance
- 2003/08/15: Renamed addComplexVariable() and addVariableAsObject() to 
      addVariable(). Now all three methods for adding different types of variables 
      are named the same.
- 2003/08/10: Improved error handling and reporting in EvaluatorVisitor.
Known Issues:
  
    - Windows batch scripts for starting the examples are broken. This is due 
      to switching from the MS JVM to the Sun appletviewer. Planned to be fixed 
      for the 2.3.0 release.
Version 2.24 (released 2002/12/31)
  
    - 2002/12/25: Fixed "not replacing escape sequences in strings" 
      bug
Version 2.23 (released 2002/08/03)
  
    - 2002/07/01: Started adding Number support to JEP class and functions
- 2002/07/08: Fixed string concatenation bug
- 2002/07/10: Added NumberFactory class and DoubleNumberFactory (with option 
      for custom NumberFactory in JEP constructor)
- 2002/08/02: Added website documents to distribution
Version 2.22 (released 2002/07/04)
  
    - 2002/06/06: Removed symbol table information from ASTVarNode (making AST 
      nodes into pure data structure elements)
- 2002/06/20: Fixed sum() issue (functions with variable number of parameters)
- 2002/06/24: Rearranged function class structure by letting PostfixMathCommand 
      implement PostfixMathCommandI (no changes to functionality)
- 2002/06/25: Added multiple thread testing classes
- 2002/06/26: Made EvaluatorVisitor non-singleton (was doing more harm than 
      good)
- 2002/06/28: Added Unicode character support for variable names
 
  
Version 
  2.21 (released 2002/06/04)
  
    - 2002/06/03: Fixed 1.1 compatibility issue in JEP.java (was using add() 
      and clear() which are not included in the 1.1.8 VM).
Version 
  2.20 (released 2002/05/31)
  
  
    - 2002/01/20: Combined multiplication and division to the same precedence 
      level
- 2002/03/10: Added implicit multiplication, allowing expressions like "3x 
      == 3*x"
- 2002/03/14: Improved evaluation performance through creating only one 
      stack for evaluation
- 2002/03/19: Changes to operator precedence (more like C and Java)
- 2002/03/19: Now using JavaCC 2.1
- 2002/03/24: Added a console application to the org.nfunk.jepexamples package
- 2002/03/28: Implemented evaluation using the Visitor design pattern
- 2002/04/13: Added setAllowUndeclared() and setImplicitMul() for control 
      of undeclared variables, and implicit multiplication options
- 2002/04/15: Added getSymbolTable() for obtaining list of variables in 
      the symbol table (e.g. after parsing an expression with allowUndeclared=true)
- 2002/04/17: Prepared directory structure for building with ant
- 2002/04/19: Full transition of build environment to ant
- 2002/04/20: Finally was persuaded to add the sqrt() function to the set 
      of built-ins
- 2002/04/27: Cleaned up error reporting using an error list in the JEP 
      class
- 2002/05/27: New documentation
- 2002/05/30: Modifications to the sample applets

Version 
  2.12 (released 2002/02/01)
  
    - 2001/08/31: Made a change to the Complex power function Complex.pow(to 
      avoid problems with applets run in Internet Explorer (Math.exp(-Infinity) 
      was not producing 0.0)
- 2001/09/10: Started working on array type
- 2001/09/20: Allowed variable number of arguments in functions
- 2001/09/20: Fixed undetected syntax error bug involving a comma before 
      a list of function parameters
- 2001/10/17: Changed order of precedence for power and unary signs. Now 
      power is of higher order than unary plus or minus
- 2001/11/10: Tweaked complex power functions
- 2001/11/10: Added error reporting for exceptions that occur while evaluating
- 2001/11/17: Edited the parser class to work without static function and 
      symbol tables
- 2001/12/21: Completed the JEPTester class for verifying correct evaluation
- 2002/01/06: Replaced some Vector operations that relied on AbstractList 
      with Java 1.1 compliant code
Version 2.11
  
    - 2001/08/26: Substituted the Netlib complex number class with a custom 
      class
Version 2.10
  
    - 2001/07/07: Finished adding complex numbers, and incorporated complex 
      numbers in nearly all built in functions
- 2001/07/08: Added string handling with concatenation with the + operator 
      and comparison with ==
- 2001/07/16: Renamed the package to org.nfunk.jep
- 2001/08/24: Bugfix - subtraction of complex numbers was not working properly
Version 2.05
  
    - 2001/03/21: Fixed PostfixMathCommand class to allow inheritance to classes 
      in other packages
- 2001/04/10: Added some error reporting functions to main interface class 
      (Error name and position)
- 2001/06/01: Finished adding hyperbolic trigonometric functions and packaging.
Version 2.04
  
    - 2001/03/01: Fixed EOF problem (included EOF in grammar)
- 2001/03/16: Removed a few redundant exception classes
Version 2.03
  
    - 2001/02/17: Corrected order of precedence for logical operators
- 2001/02/17: Added '&&', '||', and '!' operators to extend the 
      logical functionality of the parser
- 2001/02/07: Disabled the default command line output. For debugging purposes, 
      you may want to try to use setTraverse(true)
Version 2.0
  
    - 2000/10/16: Started rebuilding the whole parser with JavaCC (http://www.webgain.com/products/java_cc/)
- 2000/10/27: Completed restructuring main background parser functions in 
      JavaCC
- 2000/11/17: Created a simple interface class for intuitive interaction 
    
- 2000/12/10: Added a few logical operators
- 2001/01/06: Released the freshly rebuilt parser
Version 1.1
  
    - 2000/11/30: Changed order of precedence so division occurs before multiplication 
    
- 2000/10/01: Added exponential notation (i.e. 1.23e-3)
- 2000/10/16: Tweaked code here and there
- 2000/10/21: Finished new sample applet
- 2000/10/21: Repackaged and reorganized all source code and classes
Version 1.0
  
    - 2000/07/03: Added more documentation
- 2000/07/10: Removed all operator nodes such as MulNode or PlusNode, and 
      replaced them by using FunNode nodes with PostfixMathCommands
- 2000/08/07: Considering using JavaCC to recreate the Parser
- 2000/09/01: Fixed multiple subtraction problem. Now 1-2-3 = (1-2)-3 instead 
      of 1-(2-3)
Version 0.3
  
    - 2000/06/01: Created Web page and posted it
- 2000/06/02: Edited Web page, added one variable field just for integers
- 2000/06/06: Started adding internal code documentation
- 2000/06/09: Figured out how to create objects at run-time with the reflection 
      package. Probably useful for future use of user defined functions
- 2000/06/10: Finished adding capability of parsing standard functions as 
      well as user defined functions (thanks to Ross Bagely)
Version 0.2
  
    - 2000/06/18: Added SharedConstants class for the parser package
- 2000/06/18: Added InvalidExpressionException class which is thrown inside 
      Parser
- 2000/06/19: Tweaked the error report of Parser
- 2000/06/27: Simplified process of adding user defined functions by adding 
      a parent class PostfixMathCommand, that contains a function for checking 
      the stack passed to the command
- 2000/06/27: Extended the FunNode class to be able to handle functions 
      with multiple arguments, needs to be implemented in the parser yet
- 2000/07/01: Completed expanding parser to handle functions with multiple 
      arguments. Implemented angle function to return the angle whose tangent 
      is equal to the ratio of the arguments x/y (using the Math.atan2 method).