TO SUPPORT MY WORK, ORDER A COMMERCIAL LICENSE
THANK YOU!
v.5.0.4 (2022-05-22): Leonis – a major release: Implied Multiplication, Unicode Math Symbols, Additional Probability Distributions, Calculation Steps Register:
- Implied Multiplication, click to see usage example
- Unicode Math Symbols, click to see usage example
- Calculation Steps Register, click to see usage example
- An Attempt To Fix Expression String
- Student’s t-distribution: Probabilisty Density Function, Cumulative Distribution Function, Quantile Function
- Chi-Squared Distribution: Probabilisty Density Function, Cumulative Distribution Function, Quantile Function
- Minor Bug fixing: 259, 258, 252
- Regression tests refactoring
- License update
v.4.4.2 (2020-01-25): Gemoni – bugs fixing
- #200 System.OutOfMemoryException: Array dimensions exceeded supported range (#200)
- #199 cancelCurrentCalculation does not stop for some expressions (#199)
v.4.4.0 (2020-01-14): Gemoni – API improvement
Canonical rounding: Bye bye floating point arithmetic artifacts
ULP rounding is switched of as a default setting (can be enabled / disabled). As a default canonical rounding is switched on (can be disabled / enabled). New methods:
- mXparser.enableCanonicalRounding()
- mXparser.disableCanonicalRounding()
- mXparser.setCanonicalRounding(boolean)
- mXparser.checkIfCanonicalRounding
Argument extension – analogy to Function Extension
Now you can define user arguments implementing your own algorithm in source code.
Bugs fixed
- #168, #18 Exact special trigonometric values
- #192, #178 Logical operators precedence
- #172 “x + 4 * – 2”
v.4.3.3 (2019-01-27): Bug fix
v.4.3.2 (2019-01-25): Nuget package fix
v.4.3.0 (2019-01-19): Caprica – API improvement
Cancel ongoing calculation
- mXparser.cancelCurrentCalculation()
- mXparser.resetCancelCurrentCalculationFlag();
Set default options
- mXparser.setDefaultOptions()
User defined constants / units
- constant name can be surrounded by square bracket, i.e. [const]
- Expression.getMissingUserDefinedUnits()
Bug fixing
v.4.2.0 (2018-07-15): Aquaria – Major release
Broader types of decimal number literals
- No leading zero, i.e.: .2, .312, -.21
Fraction as number literals
- 1_2 is recognized as 1/2
- 2_3_4 is recognized as 2 + 3/4
- 17_5 is recognized as 17/5
- Just use Expression e = new Expression(“2_3_2 + 1_2”)
Double to fraction conversion
- mXparser.toFraction(double value) – double[]
- mXparser.toMixedFraction(double value) – double[]
- mXparser.fractionToString(double[] fraction) – String
- mXparser.toFractionString(double value) – String
- mXparser.toMixedFractionString(double value) – String
Disable / enable almost int rounding
- mXparser.enableAlmostIntRounding()
- mXparser.disableAlmostIntRounding()
- mXparser.checkIfAlmostIntRounding()
- mXparser.getEpsilon()
- mXparser.setEpsilon()
Variadic user defined functions
- Function f = new Function(“f(…) = sum(i, 1, [npar], par(i)^2 )”);
- [npar] – number of available parameters
- par(i) – parameter value
- body extended is supported
New special functions
- Gamma(x) – Gamma special function Γ(s)
- LambW0(x) – Lambert-W special function, principal branch 0, also called the omega function or product logarithm
- LambW1(x) – Lambert-W special function, branch -1, also called the omega function or product logarithm
- sgnGamma(x) – Signum of Gamma special function, Γ(s)
- logGamma(x) – Log Gamma special function, lnΓ(s)
- diGamma(x) – Digamma function as the logarithmic derivative of the Gamma special function, ψ(x)
- GammaL(s,x) – Lower incomplete gamma special function, γ(s,x)
- GammaU(s,x) – Upper incomplete Gamma special function, Γ(s,x)
- GammaP(s,x), GammaRegL(s,x) – Lower regularized P gamma special function, P(s,x)
- GammaQ(s,x), GammaRegU(s,x) – Upper regularized Q Gamma special function, Q(s,x)
- Beta(x,y) – The Beta special function B(x,y), also called the Euler integral of the first kind
- logBeta(x,y) – The Log Beta special function ln B(x,y), also called the Log Euler integral of the first kind, ln B(x,y)
- BetaInc(x,a,b) – The incomplete beta special function B(x; a, b), also called the incomplete Euler integral of the first kind
- BetaI(x,a,b), BetaReg(x,a,b) – The regularized incomplete beta (or regularized beta) special function I(x; a, b), also called the regularized incomplete Euler integral of the first kind
Degrees / Radians mode for trigonometrix
- mXparser.setDegreesMode()
- mXparser.setRadiansMode()
- mXparser.checkIfDegreesMode()
- mXparser.checkIfRadiansMode()
New operator – Tetration
- a^^n is recognized as a^a^a…^a – n times
Bugs fixed
- Argument.checkSyntax() #145
- Endless loop with factorial #136
- StringIndexOutOfBoundsException asking for tokens of empty expression #135
- Function.checkSyntax() always returns true #111
- Syntax for unary complement #114
- Iterative operators descending sequence #119
- checkSyntax() bug #80
- Very very very long processing time of gcd #91
- Priorities of “if”, “iff” and other calculus operations #82
Other framework support (binaries)
- .NET Core: 2.0, 2.1
- .NET Standard: 2.0
- .NET Framework: 4.7, 4.7.2
- JAVA: 1.9, 1.10
v.4.1.1 (2017-07-28): Aeries – checkSyntax() bug fixing
- Fixed: checkSyntax() returns true “already checked no errors” #75
v.4.1.0 (2017-07-09): Aeries – Major update
Various numeral systems
- Binary numbers literals
- Octal numbers literals
- Hexadecimal numbers literals
- Number literals with base between 1 and 36
- base(b, digit1, …, digitn) function to generate numbers in any given base
Leading zeros support
- 0001
- 0001.12e10
- …
Working with digits
- ndig(number, targetBase) function – number of digits – specified numeral system base
- ndig10(number) function – number of digits – base 10
- dig(number, targetBase, position) – digit at position – specified numeral system base
- dig10(number, position) – digit at position – base 10
Prime factorization
- nfact(number) – number of prime factors
- factval(number, factorId) – factor value
- factexp(number, factorId) – factor exponent
Not-a-Number
- [NaN] symbol
- isNaN(x) function
- coalesce(a1,…,an) function – first non-NaN value
Statistics
- med(a1, a2, …, an) – sample median
- mode(a1, a2, …, an) – sample mode
Boolean logic
- [true] symbol
- [false] symbol
- or(a1,…an) – variadic or
- and(a1,…an) – variadic and
- xor(a1,…an) – variadic xor
Other functions
- root(order, number) – root + support for negative numbers and odd-order
- arcsec(x) – inverse trigonometric secant
- arccsc(x) – inverse trigonometric cosecant
- ndist(v1, v2, … vn) – number of distinct values
- argmin(v1, v2, … vn) – index of minimum
- argmax(v1, v2, … vn) – index of maximum
New operator
- % support (i.e. 2%, x%)
Calculus
- der( f(x), x, x0 ) – alternative syntax for derivative (no need to define x as argument)
Built-in tokens
- Option to override built-in tokens
- Possibility to remove built-in tokens
- Possibility to change built-in token
- Key words: syntax + since
- Get key words list
Working with expression tokens
- Get missing user defined arguments
- Get missing user defined functions
Bugs fixed
- Dependent arguments and StackOverflowError #35 (introduction of recursion calls counter)
- FunctionExtension.calculate #32
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 🙂
Nuget – Package Manager (C#, F#, Visual Basic, …)
Install-Package
MathParser.org-mXparser
-Version
6.1.0
dotnet add package
MathParser.org-mXparser
--version
6.1.0
<PackageReference Include=
"MathParser.org-mXparser"
Version=
"6.1.0"
/>
Maven – Dependency (Java, Kotlin, Scala, Groovy, …)
<dependency>
<groupid>org.mariuszgromada.math
</groupid>
<artifactid>MathParser.org-mXparser
</artifactid>
<version>6.1.0
</version>
</dependency>
Maven – Gradle
implementation
'org.mariuszgromada.math:MathParser.org-mXparser:6.1.0'
CMake – Dependency / FetchContent (C++, MSVC, LLVM/Clang, GNU/GCC, MinGW, MSYS2, WSL, Windows, Linux, Unix, MacOS)
include(FetchContent)
FetchContent_Declare(
MathParserOrgMxParser
GIT_REPOSITORY https://github.com/mariuszgromada/MathParser.org-mXparser.git
GIT_TAG v.6.1.0
SOURCE_SUBDIR CURRENT/cpp/lib
)
FetchContent_MakeAvailable(MathParserOrgMxParser
)
target_link_libraries(YourExecutable MathParserOrgMxParser
)
GitHub
git clone
https://github.com/mariuszgromada/MathParser.org-mXparser
OTHER DOWNLOAD OPTIONS
Download latest release – v.6.1.0 Sagitara: .NET bin onlyDownload latest release – v.6.1.0 Sagitara: JAVA bin onlyDownload latest release – v.6.1.0 Sagitara: bin + doc
NEWS FROM MATHPARSER.ORG
SOURCE CODE
Source code .zipSource code .tar.gz
View on GitHubMathSpace.pl
This seems like a great package, I was going to incorporate it into my program but then found out that it’s missing support for hexadecimal numbers.
My use case calls for decimal, hexadecimal, scientific notation (decimal) and it’s not necessary but would like support for binary and octal, in order of priority.
Can I incorporate your parser into a C# DLL project with VS2010, is that supported? How big would the DLL be if it has very minimal and simple usage, evaluate simple things like basic algebra, no loops, no variable arguments?
Thanks
Thanks for the feedback! Code for scientific notation is already on GitHub. HEX/OCT/BIN will be also delivered with new 4.1 version. mXparser dll i c.a 0.5 MB.