We are proud to present the **new version 5.6** of the Calcpad software. It is much faster than the previous versions and includes a lot of new features.

Calcpad is ported to the latest Microsoft **.NET 6.0** platform, which is faster than .NET Framework 4.x we used before. On the other side, the Calcpad code was significantly optimized. Now, we use expression trees to pre-compile parts of code that are repeatedly executed – bodies of functions, methods etc.

We also implemented better algorithms for numerical analysis. For example, we replaced the adaptive Simpson’s method for **numerical integration** with the adaptive **Lobatto quadrature** proposed by Gander and Gautschi. We adopted this algorithm for the C# language. We also developed an improved version of Anderson and Bjorks‘s **root finding **algorithm. That is why Calcpad 5.6 runs 3-4 times faster than 3.x versions in general and over 20 times faster when numerical methods are involved.

For **plotting**, we introduced **adaptive interpolation** of functions. It provides smooth graphs with the minimum number of calculation points. They are distributed unequally, depending on the function curvature as shown on the following figure.

**Output formatting** was also improved in respect to variable substitution and units of measurement. Speed of **units arithmetic** was also enhanced by optimizing memory consumption. That is how we reduced the pressure on the Garbage Collector.

There are also some improvements in the UI layer. **Recent file list** was introduced in version 5.0. Behaviour of the Undo function was improved. Support for **Open Office** or **Libre Office** was added alternatively to MS Word. Thanks to the wkhtmltopdf project, now we have direct **export to pdf**.

And last, but not at least, we added a lot of new and useful functions as follows:

Since version 5.0:

- new
**factorial operator**“!”; **log_2**(x) – binary logarithm function;**cbrt**(x) – cubic root;**root**(x; n) – n-th root;**csc**(x) – cosecant;**sec**(x) – secant;**csch**(x) – hyperbolic cosecant;**sech**(x) – hyperbolic secant;**acsc**(x) – inverse cosecant;**asec**(x) – inverse secant;**acsch**(x) – inverse hyperbolic cosecant;**asech**(x) – inverse hyperbolic secant;**acoth**(x) – inverse hyperbolic cotangent;

Since version 5.6:

**min**(x; y; z…) – minimum of multiple values;**max**(x; y; z…) – maximum of multiple values;**sum**(x; y; z…) – sum of multiple values;**sumsq**(x; y; z…) – sum of squares;**srss**(x; y; z…) – square root of sum of squares;**average**(x; y; z…) – average of multiple values;**product**(x; y; z…) – product of multiple values;**mean**(x; y; z…) – geometric mean;**switch**(<*cond1*>; <*value1*>; <*cond2*>; <*value2*>; …; <*default*>) – selective evaluation;**take**(n; a; b; c…) – returns the n-th element from the list;**line**(x; a; b; c…) – linear interpolation for variable x;**spline**(x; a; b; c…) – Hermite spline interpolation for variable x;

You can use the “**take**” function to represent vector and matrix-like behaviour. With the “**line**” and “**spline**“, you can interpolate over tabular data. **Double interpolation** is also possible with just a few line of code. If you have a function that is slow and heavy to calculate, you can use spline interpolation to speed up you program. Just sample the function in a few points and interpolate among them. We will discuss this in the next posts.

You can download the latest version from the following link:

https://calcpad.eu/download/calcpad-setup-en-x64.zip

Enjoy!