All posts by Mariusz Gromada

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 🙂

Estimating Pi by Monte Carlo using mXparser

Using built-in random variable [Uni] from uniform continuous distribution over [0; 1] interval we sample two numbers (x,y) then check if point is inside the circle. Operation is repeated n-times, then proportion falling into circle is being measured. This is only 1/4 of the circle (positive x and positive y) with radius 1, so 4 times proportion should give estimation of pi.

Argument n = new Argument("n = 100000");
Expression e = new Expression("4 * sum(i, 1, n, if( [Uni]^2 + [Uni]^2 <= 1; 1; 0) ) / n", n);
mXparser.consolePrintln("Res. : " + e.getExpressionString() + " = " + e.calculate());
[mXparser-v.3.0.0] Res. : 4 * sum(i, 1, n, if( [Uni]^2 + [Uni]^2 <= 1; 1; 0) ) / n = 3.14748

Best regards

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 - 1000 downloads!

mXparser – 1000 downloads !

mXparser 1000 downloads
I am happy to announce that first milestone was achieved – as of today mXparser has 1000 unique downloads, and the number is growing! This is very exciting, especially considering questions you asked and feedback I gained.  mXparser seems fits your needs providing the same API for JAVA, Android and .NET (including MONO). Single framework / technology days have  gone away, and are not  coming back, meaning cross-platform apps  are with us for good.
MathParser.org launch
mXparser downloads were significantly boosted after launching http://MathParser.org site, amazing! Thank you Google!
mXparser / MathParser.org users location
 mXparser / MathParser.org users location
Best regards,
Mariusz Gromada