Releases: mariuszgromada/MathParser.org-mXparser
Major update: Bitwise Operators, Numbers in scientific notation, Units, Physical & Astronomical Constants, Equations solving via finding function root, Better tokens handling, Function Extensions - possibility of using your own implementation, Bugs fixed
v.4.0.0 (2017-03-27): Major update: Bitwise Operators, Numbers in scientific notation, Units, Physical & Astronomical Constants, Equations solving via finding function root, Better tokens handling, Function Extensions - possibility of using your own implementation, Bugs fixed!
-
Bitwise Operators
-
@~ - Bitwise unary complement
-
@& - Bitwise AND
-
@^ - Bitwise exclusive OR
-
@| - Bitwise inclusive OR
-
@<< - Signed left shift
-
@>> - Signed right shift
-
Numbers in scientific notation
-
1.2e10
-
1.2e-10
-
1.2e+10
-
1.2E10
-
1.2E-10
-
1.2E+10
-
...
-
Units
-
[%] - <Ratio, Fraction> Percentage = 0.01
-
[%%] - <Ratio, Fraction> Promil, Per mille = 0.001
-
[Y] - Septillion / Yotta = 10^24
-
[sept] - Septillion / Yotta = 10^24
-
[Z] - Sextillion / Zetta = 10^21
-
[sext] - Sextillion / Zetta = 10^21
-
[E] - Quintillion / Exa = 10^18
-
[quint] - Quintillion / Exa = 10^18
-
[P] - Quadrillion / Peta = 10^15
-
[quad] - Quadrillion / Peta = 10^15
-
[T] - Trillion / Tera = 10^12
-
[tril] - Trillion / Tera = 10^12
-
[G] - Billion / Giga = 10^9
-
[bil] - Billion / Giga = 10^9
-
[M] - Million / Mega = 10^6
-
[mil] - Million / Mega = 10^6
-
[k] - Thousand / Kilo = 10^3
-
[th] - Thousand / Kilo = 10^3
-
[hecto] - Hundred / Hecto = 10^2
-
[hund] - Hundred / Hecto = 10^2
-
[deca] - Ten / Deca = 10
-
[ten] - Ten / Deca = 10
-
[deci] - Tenth / Deci = 0.1
-
[centi] - Hundredth / Centi = 0.01
-
[milli] - Thousandth / Milli = 0.001
-
[mic] - Millionth / Micro = 10^-6
-
[n] - Billionth / Nano = 10^-9
-
[p] - Trillionth / Pico = 10^-12
-
[f] - Quadrillionth / Femto = 10^-15
-
[a] - Quintillionth / Atoo = 10^-18
-
[z] - Sextillionth / Zepto = 10^-21
-
[y] - Septillionth / Yocto = 10^-24
-
[m] - Metre / Meter (m=1)
-
[km] - Kilometre / Kilometer (m=1)
-
[cm] - Centimetre / Centimeter (m=1)
-
[mm] - Millimetre / Millimeter (m=1)
-
[inch] - Inch (m=1)
-
[yd] - Yard (m=1)
-
[ft] - Feet (m=1)
-
[mile] - Mile (m=1)
-
[nmi] - Nautical mile (m=1)
-
[m2] - Square metre / Square meter (m=
-
[cm2] - Square centimetre / Square cent
-
[mm2] - Square millimetre / Square mill
-
[are] - Are (m=1)
-
[ha] - Hectare (m=1)
-
[acre] - Acre (m=1)
-
[km2] - Square kilometre / Square kilom
-
[mm3] - Cubic millimetre / Cubic mill
-
[cm3] - Cubic centimetre / Cubic cent
-
[m3] - Cubic metre / Cubic meter (m=
-
[km3] - Cubic kilometre / Cubic kilom
-
[ml] - Millilitre / Milliliter (m=1)
-
[l] - Litre / Liter (m=1)
-
[gall] - Gallon (m=1)
-
[pint] - Pint (m=1)
-
[s] - Second (s=1)
-
[ms] - Millisecond (s=1)
-
[min] - Minute (s=1)
-
[h] - Hour (s=1)
-
[day] - Day (s=1)
-
[week] - Week (s=1)
-
[yearj] - Julian year = 365.25 days (s=1)
-
[kg] - Kilogram (kg=1)
-
[gr] - Gram (kg=1)
-
[mg] - Milligram (kg=1)
-
[dag] - Decagram (kg=1)
-
[t] - Tonne (kg=1)
-
[oz] - Ounce (kg=1)
-
[lb] - Pound (kg=1)
-
[b] - Bit (bit=1)
-
[kb] - Kilobit (bit=1)
-
[Mb] - Megabit (bit=1)
-
[Gb] - Gigabit (bit=1)
-
[Tb] - Terabit (bit=1)
-
[Pb] - Petabit (bit=1)
-
[Eb] - Exabit (bit=1)
-
[Zb] - Zettabit (bit=1)
-
[Yb] - Yottabit (bit=1)
-
[B] - Byte (bit=1)
-
[kB] - Kilobyte (bit=1)
-
[MB] - Megabyte (bit=1)
-
[GB] - Gigabyte (bit=1)
-
[TB] - Terabyte (bit=1)
-
[PB] - Petabyte (bit=1)
-
[EB] - Exabyte (bit=1)
-
[ZB] - Zettabyte (bit=1)
-
[YB] - Yottabyte (bit=1)
-
[J] - Joule (m=1, kg=1, s=1)
-
[eV] - Electronovolt (m=1, kg=1, s=1
-
[keV] - Kiloelectronovolt (m=1, kg=1,
-
[MeV] - Megaelectronovolt (m=1, kg=1,
-
[GeV] - Gigaelectronovolt (m=1, kg=1,
-
[TeV] - Teraelectronovolt (m=1, kg=1,
-
[m/s] - Metre / Meter per second (m=1,
-
[km/h] - Kilometre / Kilometer per hour
-
[mi/h] - Mile per hour (m=1, s=1)
-
[knot] - Knot (m=1, s=1)
-
[m/s2] - Metre / Meter per squar
-
[km/h2] - Kilometre / Kilometer p
-
[mi/h2] - Mile per square hour (m
-
[rad] - Radian (rad=1)
-
[deg] - Degree of arc (rad=1)
-
['] - Minute of arc (rad=1)
-
[''] - Second of arc (rad=1)
-
Physical Constants
-
[c] - Light speed in vacuum [m/s] (m=1, s=1)
-
[G.] - Gravitational constant (m=1, kg=1, s=1)]
-
[g] - Gravitational acceleration on Earth [m/s^2] (m=1, s=1)
-
[hP] - Planck constant (m=1, kg=1, s=1)
-
[h-] - Reduced Planck constant / Dirac constant (m=1, kg=1, s=1)]
-
[lP] - Planck length [m] (m=1)
-
[mP] - Planck mass [kg] (kg=1)
-
[tP] - Planck time [s] (s=1)
-
Astronomical Constants
-
[ly] - Light year [m] (m=1)
-
[au] - Astronomical unit [m] (m=1)
-
[pc] - Parsec [m] (m=1)
-
[kpc] - Kiloparsec [m] (m=1)
-
[Earth-R-eq - ]Earth equatorial radius [m] (m=1)
-
[Earth-R-po] - Earth polar radius [m] (m=1)
-
[Earth-R] - Earth mean radius (m=1)
-
[Earth-M] - Earth mass [kg] (kg=1)
-
[Earth-D] - Earth-Sun distance - semi major axis [m] (m=1)
-
[Moon-R] - Moon mean radius [m] (m=1)
-
[Moon-M] - Moon mass [kg] (kg=1)
-
[Moon-D] - Moon-Earth distance - semi major axis [m] (m=1)
-
[Solar-R] - Solar mean radius [m] (m=1)
-
[Solar-M] - Solar mass [kg] (kg=1)
-
[Mercury-R] - Mercury mean radius [m] (m=1)
-
[Mercury-M] - - Mercury mass [kg] (kg=1)
-
[Mercury-D]Mercury-Sun distance - semi major axis [m] (m=1)
-
[Venus-R] - Venus mean radius [m] (m=1)
-
[Venus-M] - Venus mass [kg] (kg=1)
-
[Venus-D] - Venus-Sun distance - semi major axis [m] (m=1)
-
[Mars-R] - Mars mean radius [m] (m=1)
-
[Mars-M] - Mars mass [kg] (kg=1)
-
[Mars-D] - Mars-Sun distance - semi major axis [m] (m=1)
-
[Jupiter-R] - Jupiter mean radius [m] (m=1)
-
[Jupiter-M] - Jupiter mass [kg] (kg=1)
-
[Jupiter-D] - Jupiter-Sun distance - semi major axis [m] (m=1)
-
[Saturn-R] - Saturn mean radius [m] (m=1)
-
[Saturn-M] - Saturn mass [kg] (kg=1)
-
[Saturn-D] - Saturn-Sun distance - semi major axis [m] (m=1)
-
[Uranus-R] - Uranus mean radius [m] (m=1)
-
[Uranus-M] - Uranus mass [kg] (kg=1)
-
[Uranus-D] - Uranus-Sun distance - semi major axis [m] (m=1)
-
[Neptune-R] - Neptune mean radius [m] (m=1)
-
[Neptune-M] - Neptune mass [kg] (kg=1)
-
[Neptune-D] - Neptune-Sun distance - semi major axis [m] (m=1)
-
Equations solving via finding function root
-
solve( f(x), x, a, b ) - solving f(x) = 0
-
Better tokens handling
-
Better handling of invalid / not known tokens
-
Looks like functionality
-
Function Extensions - possibility of using your own implementation
-
FunctionExtension interface + new constructor in Function class
-
Bugs fixed
-
Exception thrown by getCopyOfInitialTokens() #21
-
System.format.exception - system.IO.EndOfStreamException #20
-
Expression relating factorial "!" cause the application to hang #17
-
Negative sign missing when is right of operators #16
-
Negative in if statement #12
-
Speed when debugging #11
-
User defined arguments ending in e #10
-
New regression tests - current tests coverage:
-
622 expression related tests
-
114 syntax related tests
-
30 api related tests
-
20 performance tests
Enjoy :-)
Major update: random numbers, double rounding, ULP rounding, epsilon comparison
v.3.0.0 (2016-05-18): Major update: Random numbers, Probability distributions & Random variables, Double precision rounding, ULP rounding, epsilon comparison, New special functions.
.NET: since v.3.0.0 dll - different private key used for signing.
Random numbers - new functions
- rUni(a, b) - Random number from uniform continuous distribution U(a,b)
- rUnid(a, b) - Random number from uniform discrete distribution U{a,b}
- rNor(m, s) - Random number from normal distribution N(m,s)
- rList(a1, a2, ..., an) - Random number from given list of numbers
Probability distributions - new functions
- pUni(x, a, b) - Probability distribution function - Uniform continuous distribution U(a,b)
- cUni(x, a, b) - Cumulative distribution function - Uniform continuous distribution U(a,b)
- qUni(q, a, b) - Quantile function (inverse cumulative distribution function) - Uniform continuous distribution U(a,b)
- pNor(x, a, b) - Probability distribution function - Normal distribution N(m,s)
- cNor(x, a, b) - Cumulative distribution function - Normal distribution N(m,s)
- qNor(q, m, s) - Quantile function (inverse cumulative distribution function) - Normal distribution N(m,s)
Random variables (predefined) - acting as random constant (no parameters)
- [Int] - Random variable - random integer
- [Int1] - Random variable - random integer - Uniform discrete distribution U{-10^1, 10^1}
- [Int2] - Random variable - random integer - Uniform discrete distribution U{-10^2, 10^2}
- [Int3] - Random variable - random integer - Uniform discrete distribution U{-10^3, 10^3}
- [Int4] - Random variable - random integer - Uniform discrete distribution U{-10^4, 10^4}
- [Int5] - Random variable - random integer - Uniform discrete distribution U{-10^5, 10^5}
- [Int6] - Random variable - random integer - Uniform discrete distribution U{-10^6, 10^6}
- [Int7] - Random variable - random integer - Uniform discrete distribution U{-10^7, 10^7}
- [Int8] - Random variable - random integer - Uniform discrete distribution U{-10^8, 10^8}
- [Int9] - Random variable - random integer - Uniform discrete distribution U{-10^9, 10^9}
- [nat] - Random variable - random natural number including 0
- [nat1] - Random variable - random natural number including 0 - Uniform discrete distribution U{0, 10^1}
- [nat2] - Random variable - random natural number including 0 - Uniform discrete distribution U{0, 10^2}
- [nat3] - Random variable - random natural number including 0 - Uniform discrete distribution U{0, 10^3}
- [nat4] - Random variable - random natural number including 0 - Uniform discrete distribution U{0, 10^4}
- [nat5] - Random variable - random natural number including 0 - Uniform discrete distribution U{0, 10^5}
- [nat6] - Random variable - random natural number including 0 - Uniform discrete distribution U{0, 10^6}
- [nat7] - Random variable - random natural number including 0 - Uniform discrete distribution U{0, 10^7}
- [nat8] - Random variable - random natural number including 0 - Uniform discrete distribution U{0, 10^8}
- [nat9] - Random variable - random natural number including 0 - Uniform discrete distribution U{0, 10^9}
- [Nat] - Random variable - random natural number
- [Nat1] - Random variable - random natural number - Uniform discrete distribution U{1, 10^1}
- [Nat2] - Random variable - random natural number - Uniform discrete distribution U{1, 10^2}
- [Nat3] - Random variable - random natural number - Uniform discrete distribution U{1, 10^3}
- [Nat4] - Random variable - random natural number - Uniform discrete distribution U{1, 10^4}
- [Nat5] - Random variable - random natural number - Uniform discrete distribution U{1, 10^5}
- [Nat6] - Random variable - random natural number - Uniform discrete distribution U{1, 10^6}
- [Nat7] - Random variable - random natural number - Uniform discrete distribution U{1, 10^7}
- [Nat8] - Random variable - random natural number - Uniform discrete distribution U{1, 10^8}
- [Nat9] - Random variable - random natural number - Uniform discrete distribution U{1, 10^9}
- [Nor] - Random variable - Normal distribution N(0,1)
Double precision rounding
- round(value, places) - decimal rounding (half-up)
New special functions
- erf(x) - Gauss error function
- erfc(x) - Gauss complementary error function
- erfInv(x) - Inverse Gauss error function
- erfcInv(x) - Inverse Gauss complementary error function
Other functions
- ulp(x) - Unit in The Last Place
Binary relations - epsilon+ulp comparison - enabled as default
If a rel b then applied epsilon is maximum from epsilon and ulp(b) : i.e. a eq b if a \in [b-eps; b+eps] inclusive
- mXparser.setExactComparison()
- mXparser.setEpsilonComparison()
- mXparser.setEpsilon(double epsilon)
- mXparser.setDefaultEpsilon()
- mXparser.getEpsilon()
- mXparser.checkIfEpsilonMode()
- mXparser.checkIfExactMode()
Intelligent automatic double ULP rounding - enabled as default
** Try 0.1 + 0.1 + 0.1 - it will give exact 0.3 :-) **
- mXparser.enableUlpRounding()
- mXparser.disableUlpRounding()
- mXparser.checkIfUlpRounding()
Parser tokens definition now public in API
- mxparser.parsertokens
Expression after tokenization now public in API
- Expression.getCopyOfInitialTokens()
- mxparser.parsertokens
- mXparser.consolePrintTokens()
Significant reorganization of code
- Mainly mathcollection & parser tokens
Backwards compatibility
- is preserved for String API, Expression, Function, Argument, Constnat, ...
- other public API was reorganized (mainly mxparser.mathcollection)
Bugs fixed
- bugs related to iterated operators
Other changes
- Many new regression tests
Enjoy :-)
Average, Variance, Standard deviation + New iterative operators
v.2.4.0 (2016-02-28): Average, Variance, Standard deviation + New iterative operators
New functions with variadic parameters:
- mean(a1, a2, ... , an) - sample average;
- var(a1, a2, ... , an) - bias-corrected sample variance;
- std(a1, a2, ... , an) - bias-corrected sample standard deviation.
New iterative operators:
- mini(i, from, to, f(i), ) - minimum from function values;
- maxi(i, from, to, f(i), ) - maximum from function values;
- avg(i, from, to, f(i), ) - average from function values;
- vari(i, from, to, f(i), ) - bias-corrected sample variance from function values;
- stdi(i, from, to, f(i), ) - bias-corrected sample standard deviation from function values.
Other changes
- New regression tests to cover new functions;
- Small code reorganization;
- Added manifest to jar files containing version information;
- .dll files were signed.
Enjoy :-)
Mariusz Gromada
Trailing letter 'e' bug fix
Prime numbers supported! Multithreading performance tests! New functions: Exponential/Offset/Logarithmic integral!
v.2.3.0 (2016-01-17): Prime numbers supported! Multithreading performance tests! New functions: Exponential/Offset/Logarithmic integral!
Prime numbers supported:
- new class PrimesCache in mathcollection
- MathFunctions extended with prime testes
- ispr(n) - Prime test function supported in expressions
- Pi(n) - Prime Counting function supported in expressions
- mXparser.initPrimesCache() methods (and others) to initialize prime numbers cache
Some special functions supported
- Ei(x) - Exponential integral function supported in expressions
- li(x) - Logarithmic integral function supported in expressions
- Li(x) - Offset logarithmic integral function supported in expressions
New constants
- [G] - Gompertz Constant OEIS A073003 supported in expressions
- [li2] - li(2) A069284 - supported in expressions
Multithreading performance tests
- Default number of cores taken from the environment
- Possibility to change number of default threads:
- PerformanceTests.start(int threadsNum)
- mXparser.setThreadsNumber(int threadsNumber)
New regression tests to cover new functionalities
Enjoy :-)
Mariusz Gromada
Android is coming!
v.2.2.0 (2016-01-10): Android is coming!
mxparser_jdk1.7.jar - tested with Android !!!
- all regression tests passed :-)
New public methods in the mXparser class
- static String getConsoleOutput() - returns as string output produced by mXparser.consolePrin/ln() methods. Using this method you can capture the output to the string variable.
- static void resetConsoleOutput() - resets the string representing console output
- Added CONSOLE/PREFIX & CONSOLE_OUTPUT_STRING/PREFIX + configuration
Method modified in mXparser class
- consolePrintln()
- consolePrintln(Object o)
- consolePrint(Object o)
- Above methods are outputting also to string representing console output.
New RunTest method in regressiontesting, method executes specified scenario according to below params:
- reg - Expression regression tests
- api - mXparser API regression tests
- syn - Syntax checking regression tests
- perf - Performance tests
Code clean-up
- blank lines
- trailing white spaces
- src folders structure for c-sharp is now the same as in java
Enjoy :-)
Mariusz Gromada
Binaries for older versions of JAVA and .NET
Fixed bug with min/max function
v.2.1.1 (2016-01-04)
- Fixed bug with min/max functions.
Documentation update + new methods for dec, hex, ASCII conversion
v.2.1.0 (2016-01-02):
New static methods in class mXparser
- mXparser.numberToHexString(number) + overloads: int, long, double
- mXparser.hexString2AsciiString(String hexString)
- mXparser.numberToAsciiString(number) + overloads: int, long, double
- additional regression tests for the above methods
Hello World examples showing how to use mXparser binary library (manual includes: projects, code, screenshots) for:
- JAVA (project done in Eclipse Mars 1)
- C# (project done in Visual Studio 2015)
- Visual Basic (project done in Visual Studio 2015)
- C++/CLI (project done in Visual Studio 2015)
- F# (project done in Visual Studio 2015)
Major update of the library providing more intuitive and much simpler to use API
v.2.0.0 (2015-12-31):
Major update of the library providing more intuitive and much simpler to use API, no changes to the MathCollection.
Methods removed: setRecursiveMode(), disableRecursiveMode()
- No need to manually mark recursive mode, mXparser is recognizing this mode automatically.
New handy and super easy (natural to use) constructors:
- Constructors for user defined arguments (Argument / RecursiveArgument classes), user defined constant (Constant class), user defined functions (Function class).
Sample code:
Constant c = new Constant("c=5");
Constant c = new Constant("c=5+2");
Argument x = new Argument("x=5");
Constant c = new Constant("c=5+x", x);
Argument y = new Argument("y=2*x", x);
RecursiveArgument f = new RecursiveArgument("f(n)=n*f(n-1)");
Function f = new Function("f(x,y)=sin(x)+y");
Function f = new Function("f(n)=if( n>0, n*f(n-1), 1)");
New methods: addDefinitions(PrimitiveElement... elements), removeDefinitions(PrimitiveElement... elements)
- New class PrimitiveElement introduced only to simplify constructors of arguments, constants, functions and expressions.
- Classes Argument, RecursiveArgument, Constant, Functions inherits now from PrimitiveElement class, it means you can call one method for adding / removing definitions by passing comma separated list of elements that can be different type (supported types: Argument, RecursiveArgument, Constant, Function).
- Method addArguments(), addConstants(), addFunctions(),removeArguments(), removeConstants(), removeFunctions() are still public, but this will change in the future.
Sample code:
Constant c = new Constant("c=5");
Argument x = new Argument("x=10/2");
Expression e = new Expression("c+x");
e.addDefinitions(x,c);
Modified constructors for classes Argument, RecursiveArgument, Constant, Function
- Constructors relying on directly given argument / constant / function name are now checking given name according to the predefined regular expression (the name must start with letters, and then digits / underscores / letters are allowed).
- Constructors removed – all constructors relying on ArrayList/List of arguments, constants, functions or on varidic type Argument, Constant, Function were substituted based on comma separated prams list of PrimitiveElement type, where Argument, Constant, Functions extend / inherit PrimitiveElement).
C# library is now Common Language Specification Compliant, it means mXparser is available right now to many other .NET languages (providing exactly the same API), including:
- C#
- Visual Basic .NET
- C++/CLI
- F#
Other changes
- New extended list of regression tests (to cover new methods, constructors, etc...)
- Implemented Performance Tests
- Source code converted from cp150 to UTF-8
- Source code reorganization (some part of package level code of the Expression class was moved to the mXparser class)
- Some bugs fixed (for sure there are others)