Category Archives: Release notes

mXparser - v.4.0.0 - released! Major update!

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

  • - 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 🙂

mXparser - v.3.0.0 - released!

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 🙂

mXparser 3.0.0 is very close to release

Dear All,

I am happy to announce that mXparser 3.0.0 is very close to release. Change will bring a lot of new features 🙂 including:

  • Random numbers
  • Probability distributions
  • Random variables
  • Double precision rounding
  • Intelligent automatic ULP rounding to minimize issues similar to  0.1 + 0.1 + 0.1 = 0.30000000000000004
  • Epsilon comparison from binary relations
  • New special functions (non-elementary)
  • Significant code reorganization

Best regards

 

mXparser - v.2.4.0 - Average, Variance, Standard deviation, New iterated operators

Dear All,

I am happy to announce that new version of mXparser has just been released. Update delivers below functionalities

New variadic functions

- Mean value: mean(a1, a2, ..., an)
import org.mariuszgromada.math.mxparser.*;
...

Expression e = new Expression("mean(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)");
mXparser.consolePrintln("Res: " + e.calculate());
[mXparser-v.2.4.0] Res: 5.5
- Bias-corrected sample variance: var(a1, a2, ..., an)
import org.mariuszgromada.math.mxparser.*;
...

Expression e = new Expression("var(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)");
mXparser.consolePrintln("Res: " + e.calculate());
[mXparser-v.2.4.0] Res: 9.166666666666666
- Bias-corrected sample standard deviation: std(a1, a2, ..., an)
import org.mariuszgromada.math.mxparser.*;
...

Expression e = new Expression("std(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)");
mXparser.consolePrintln("Res: " + e.calculate());
[mXparser-v.2.4.0] Res: 3.0276503540974917

New iterated operators

- Minimum from sample function values: mini(i, from, to, f(i), <by>)
import org.mariuszgromada.math.mxparser.*;
...

Expression e = new Expression("mini(x, -pi, pi, sin(x), 2*pi/1000)");
mXparser.consolePrintln("Res: " + e.calculate());
[mXparser-v.2.4.0] Res: -1.0
- Maximum from sample function values: maxi(i, from, to, f(i), <by>)
import org.mariuszgromada.math.mxparser.*;
...

Expression e = new Expression("maxi(x, -pi, pi, sin(x), 2*pi/1000)");
mXparser.consolePrintln("Res: " + e.calculate());
[mXparser-v.2.4.0] Res: 1.0
- Average from sample function values: avg(i, from, to, f(i), <by>)
import org.mariuszgromada.math.mxparser.*;
...

Expression e = new Expression("avg(x, -pi, pi, sin(x), 2*pi/1000)");
mXparser.consolePrintln("Res: " + e.calculate());
[mXparser-v.2.4.0] Res: 4.8615748597837905E-17
- Bias-corrected variance from sample function values: vari(i, from, to, f(i), <by>)
import org.mariuszgromada.math.mxparser.*;
...

Expression e = new Expression("vari(x, -pi, pi, sin(x), 2*pi/1000)");
mXparser.consolePrintln("Res: " + e.calculate());
[mXparser-v.2.4.0] Res: 0.4999999999999962
- Bias-corrected standard deviation from sample function values: stdi(i, from, to, f(i), <by>)
import org.mariuszgromada.math.mxparser.*;
...

Expression e = new Expression("stdi(x, -pi, pi, sin(x), 2*pi/1000)");
mXparser.consolePrintln("Res: " + e.calculate());
[mXparser-v.2.4.0] Res: 0.7071067811865449

Enjoy 🙂

Mariusz Gromada

mXparser v.2.3.0: Extensive prime numbers support, Multi-threading performance tests, New built-in functions and constants!

Major update of the library was released on Jan,  17th 2016.

Extensive support for the prime numbers:

  • new class PrimesCache in mathcollection
  • MathFunctions extended with primality test
  • ispr(n) - Primality 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

Download mXparser-v.2.3.0

Enjoy 🙂

Mariusz Gromada

mXparser v.2.2.0: Android is coming

mXparser and Android

Since mXparser-v.2.2.0 library is being always tested also on the Android platform. I can confirm that all regression tests were passed without any problems. Recommended library to use directly in the Android project is mXparser built with JDK 1.7.

Console output available in String

In terms of System.out.println() Android behavior is different than JVM causing that all data passed to Console on JVM is printed in Log.cat by Android Dalvik. If you will use mXparser.consolePrintln()/Print() methods instead of System.out. equivalents  you will also get access to the console output string containing printed data. Please refer to the API specification of the mXparser class.

Enjoy 🙂

Mariusz Gromada