Standard Library

CSMic.StandardLibrary adds optional constants and common math functions to the core interpreter.

Install it from NuGet:

dotnet add package CSMic.StandardLibrary

Official package page:

https://www.nuget.org/packages/CSMic.StandardLibrary

Initialize

using CSMic;
using CSMic.StandardLibrary;

var interpreter = new InputInterpreter();
Initializer.InitializeAll(interpreter);

decimal result = interpreter.Interpret("max(10, abs(-12))");
// result == 12

Initializer.InitializeAll registers every standard function and constant.

Selective Initialization

Use narrower initializers when your application only wants part of the standard library:

  • InitializeAllFunctions
  • InitializeConstants
  • InitializeBaseFunctions
  • InitializeAngleFunctions
  • InitializeRoundingFunctions
  • InitializeTrigonometryFunctions
  • InitializeNumberTheoryFunctions
  • InitializeRandomFunctions

Example:

var interpreter = new InputInterpreter();

Initializer.InitializeConstants(interpreter);
Initializer.InitializeTrigonometryFunctions(interpreter);

decimal result = interpreter.Interpret("sin(pi / 2)");

Constants

InitializeConstants registers constants as interpreter variables:

  • pi
  • e
  • tau
  • phi
  • goldenratio
  • eurler
  • euler
  • omega

Example:

interpreter.Interpret("2 * pi");
interpreter.Interpret("tau / pi");

Function Groups

Base functions:

  • abs(value)
  • sign(value)
  • min(left, right)
  • max(left, right)
  • sqrt(value)
  • pow(base, exponent)
  • log(value, base)
  • ln(value)
  • lerp(start, end, amount)
  • smoothstep(startEdge, endEdge, value)
  • map(value, oldMinimum, oldMaximum, newMinimum, newMaximum)
  • normalize(value, minimum, maximum)

Angle functions:

  • degrees(radians)
  • radians(degrees)
  • wrapangle(value, minimum, maximum)

Rounding functions:

  • floor(value)
  • ceiling(value)
  • truncate(value)
  • frac(value)
  • round(value, precision)
  • clamp(value, minimum, maximum)

Trigonometry functions:

  • sin(value)
  • cos(value)
  • tan(value)
  • asin(value)
  • acos(value)
  • atan(value)
  • atan2(y, x)

Hyperbolic trigonometry functions:

  • sinh(value)
  • cosh(value)
  • tanh(value)
  • asinh(value)
  • acosh(value)
  • atanh(value)

Number theory functions:

  • fac(value)
  • ncr(n, r)
  • npr(n, r)
  • gcd(left, right)
  • lcm(left, right)
  • fib(index)
  • iseven(value)
  • isodd(value)
  • isint(value)
  • isprime(value)

Random functions:

  • flip()
  • bern(probability)
  • rand()
  • rands(minimum, maximum)
  • randn()
  • randns(minimum, maximum)

Package Role

CSMic.StandardLibrary does not replace the core interpreter. It extends an InputInterpreter instance by registering ICodedFunction implementations and assigning constants.

You can combine standard-library functions with your own custom functions on the same interpreter.