# 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.