# Crate xxcalc [−] [src]

`xxcalc`

is a crate which provides an embeddable floating-point
polynomial calculator and linear solver.

You can use `xxcalc`

to embed mathematical expression evaluator
in your own programs. By default the calculator provides addition `+`

,
subtraction `-`

, multiplication `*`

, division `/`

and exponentation `^`

operators. Some functions such as `log`

and `log10`

are implemented,
as well as `pi`

and `e`

constants. This is a polynomial calculator, so
you can perform arithmetic operations on polynomials (using `x`

symbol
by default) - a simple floating-point number is just a special case of
a polynomial (the constant polynomial, polynomial of degree zero).

Furthermore the crate is well structurized and documented - you can use pieces it provides to create your own custom solutions (you can use or change a tokenizer, parser and evaluator however you want). Look at implementations of PolynomialParser, LinearSolverParser, PolynomialEvaluator or LinearSolverEvaluator to see how to extend default implementations.

With the crate a `xxcalc`

binary is provided which can be used as a
standalone CLI calculator (which can be replacement for `bc`

command).
If the crate is installed with a feature "interactive" enabled, a history
of commands is enabled.

Whole library is meticulously tested, use `cargo test`

to run unit tests
(including doc examples), `cargo bench`

will run simple benchmarks, while
`cargo bench -- --ignored`

will run more computation-heavy benchmarks.

# Examples

You can easily take a LinearSolver or PolynomialCalculator to embed mathematical engine inside your programs.

use xxcalc::linear_solver::LinearSolver; use xxcalc::calculator::Calculator; use xxcalc::polynomial::Polynomial; assert_eq!(LinearSolver.process("2x + 1 = 2(1-x)"), Ok(Polynomial::constant(0.25))); assert_eq!(LinearSolver.process("0.1*-2+4"), Ok(Polynomial::constant(3.8)));

Please see documentation for PolynomialCalculator for more examples.

## Modules

calculator |
Calculator is an easy to use generic method of evaluating string expressions. |

evaluator |
Evaluator is a TokensReducer, it takes token in RPN form and evaluates its Polynomial value. |

linear_solver |
Defines a LinearSolver which extends a PolynomialCalculator with ability of solving single linear equation. |

parser |
Parser is a TokensProcessor, it takes Tokens in a classical infix form and transforms them into Reverse Polish Notation form for further evaluation. |

polynomial |
Defines Polynomial expression with basic operators on it. |

polynomial_calculator |
Defines a PolynomialCalculator with common arithmetic operations, functions and constants already defined. |

tokenizer |
Tokenizer is a StringProcessor, it takes string expression and converts it into Tokens for further processing. |

## Structs

Tokens |
Tokens is a compound storage for list of tokens with their identifiers. |

## Enums

EvaluationError |
An error that occurs during token reduction, usually by an evaluator. |

ParsingError |
An error that occurs during token processing, usually by a parser. |

Token |
Token is a basic unit returned after tokenization using a StringProcessor. |

## Traits

StringProcessor |
Transforms text expression into list of tokens. |

TokensProcessor |
Transforms list of tokens into another list of tokens. |

TokensReducer |
Evaluates list of tokens into a single Polynomial value. |

## Type Definitions

Identifiers |
Vector of unique identifiers. |

TokenList |
List of tokens with their position. |