 RunJS

# Mathematical notation for JavaScript developers explained

Published on  Being able to understand and implement mathematics in JavaScript can be very useful. This is particularly true when working with highly visual and interactive applications, something JavaScript is well suited to. However, it can be hard to make sense of it all and how it translates to code without a background in mathematics.

In this post, I'll explain some of the most common mathematical concepts and their symbols. I'll also provide examples so you can see how these concepts can be implemented in JavaScript. By the end of this post, you should have a better understanding of what those symbols mean and how you can translate them to code.

## Dot and cross symbols

The dot and cross symbols are common in mathematics, but their uses differ depending on the context.

### Scalar multiplication

Both symbols can represent the simple multiplication of scalars. The following are equivalent: Generally, in JavaScript, the asterisk is used for multiplication:

``const result = 9 * 8;``

The multiplication sign is often only used to avoid ambiguity. For example, here it is omitted entirely: If the variables are scalars, the code will look like this;

``const result = 5 * k * j;``

### Vector multiplication

For vector multiplication, often, an open dot `∘` is used. This symbol represents the Hadamard product. In JavaScript, it could be implemented like this:

``````function multiply(a, b) {  return [a * b, a * b];}
function multiplyScalar(a, scalar) {  return [a * scalar, a * scalar];}
const s = 5;const k = [1, 2];const j = [2, 3];
const v = multiply(k, j);const result = multiplyScalar(v, s);// [ 10, 30 ]``````

### Dot product

The dot symbol `·` can denote the dot product of two vectors. Sometimes this is called the scalar product as it evaluates to a scalar. The code for this could look like this:

``````function dot(a, b) {  return a * b + a * b + a * b;}
const k = [0, 1, 0];const j = [1, 0, 0];
const result = dot(k, j);// 0``````

The result of `0` means that the vectors are perpendicular.

### Cross product

The cross symbol `×` can denote the cross product of two vectors. In code, it would look like this:

``````function cross(a, b) {  const ax = a,    ay = a,    az = a,    bx = b,    by = b,    bz = b;
const rx = ay * bz - az * by;  const ry = az * bx - ax * bz;  const rz = ax * by - ay * bx;  return [rx, ry, rz];}
const k = [0, 1, 0];const j = [1, 0, 0];
const result = cross(k, j);// [ 0, 0, -1 ]``````

## Sigma

The sigma symbol Σ is used for summation. Basically, summing up numbers. Here, `i=1` means start at `1` and end at the number above the sigma, `100`. These are the lower and upper bounds, respectively. The i to the right of the Σ tells us what we are summing. In code this can take the following form:

``let sum = 0;for (let i = 1; i <= 100; i++) {  sum += i;}// 5050``

Here is another slightly more complicated example: And the code for this:

``let sum = 0;for (let i = 1; i <= 100; i++) {  sum += 2 * i + 1;}// 10200``

Sigma can also be nested, with the right-most sigma getting evaluated first unless the expression uses parentheses to alter the order. And in code:

``let sum = 0;for (let i = 1; i <= 2; i++) {  for (let j = 4; j <= 6; j++) {    sum += 3 * i * j;  }}// 135``

## Capital Pi

The capital Pi or 'Big Pi' is very similar to sigma, except that it uses multiplication instead of summation to find the product of a sequence of values.

Here is an example: In code, it might look like this:

``let value = 1;for (let i = 1; i <= 7; i++) {  value *= i;}// 5040``

## Bars

Bars are another one that can mean different things depending on the context. Below are three common uses: absolute value, Euclidean norm, and determinant. These all describe the length of an object.

### Absolute value This means the absolute value of `x`. In JavaScript, it looks like this:

``const x = -4;const result = Math.abs(x);// 4``

### Euclidean norm The Euclidean norm is concerned with vectors, and it's also known as the 'magnitude' or 'length' of a vector.

Here is an example using an array of `[x, y, z]` to represent a 3D vector:

``````function length(vector) {  const x = vector;  const y = vector;  const z = vector;  return Math.sqrt(x * x + y * y + z * z);}
const result = length([0, 6, -8]);// 10``````

### Determinant Here is an example of calculating the determinant of a 2x2 matrix, represented by a flat array.

``````function determinant(a) {  return a * a - a * a;}
const result = determinant([1, 0, 0, 1]);// 1``````

## Hat

The 'hat' symbol is commonly used in geometry to represent a unit vector. For example, here is the unit vector of `a`: In Cartesian space, a unit vector typically has a length of 1. This means each part of the vector will be in the range of -1.0 to 1.0. The following example 'normalizes' a 3D vector into a unit vector:

``````function normalize(vector) {  const x = vector;  const y = vector;  const z = vector;  const squaredLength = x * x + y * y + z * z;
if (squaredLength > 0) {    const length = Math.sqrt(squaredLength);    return [x / length, y / length, z / length];  }  return vector;}
const result = normalize([0, 8, -6]);// [ 0, 0.8, -0.6 ]``````

## Element

In set theory, the 'element of' symbols ∈ and ∋ are often used to describe whether something is an element of a set. For example: Here there is a set of numbers `A { 3, 9, 14 }`, and it is saying 3 is an 'element of' that set.

A simple implementation might look like this:

``````const A = [3, 9, 14];
const result = A.indexOf(3) >= 0;// true``````

The backwards ∋ is the same, but the order changes: You can also use the 'not an element of' symbols ∉ and ∌ like so: ## Functions

Functions are a core part of mathematics, and they translate to code quite naturally.

A function is a way of describing what happens to an input variable in order to get the output result. For example, the following is a function: This function can be given a name typically `ƒ` would be used, but it could be `A(x)` or anything else. In code, you might give it a more meaningful name, like `square` and write it like this:

``function square(x) {  return Math.pow(x, 2);}``

Functions can also have multiple parameters. These are known as arguments in mathematics, and the number of arguments a function takes is known as the arity of the function. In code:

``function length(x, y) {  return Math.sqrt(x * x + y * y);}``

### Piecewise function

Functions can be thought of as having three main parts: the input, the relationship, and the output. The relationship being how the input relates to the output. Some functions will use different relationships depending on the input value. The following function ƒ chooses between two 'sub functions' depending on the input value. This is very similar to `if` / `else` in code.

``function f(x) {  if (x >= 1) {    return (Math.pow(x, 2) - x) / x;  }  return 0;}``

### Common functions

Some functions are widespread in mathematics. For a developer, these are similar to built-in functions, like `parseInt` in JavaScript.

One example is the sgn function. This is the signum or sign function. Using piecewise function notation, it looks like this: In code, it might look like this:

``function sgn(x) {  if (x < 0) return -1;  if (x > 0) return 1;  return 0;}``

## Floor & ceiling

The special brackets `⌊x⌋` and `⌈x⌉` represent the floor and ceil functions, respectively.  In code:

``Math.floor(x);Math.ceil(x);``

When the two symbols are mixed `⌊x⌉`, it typically represents a function that rounds to the nearest integer: In code:

``Math.round(x);``

## Final thoughts

This is a big topic to explore, and this article just scratches the surface. If you'd like to find out more, a good starting point is the math-as-code repository which was an inspiration for this article.

A handy way to run the above code examples is via the RunJS app. RunJS is a JavaScript playground available for Mac, Windows and Linux. It runs your code and gives you live feedback as well as a number of other powerful features. Give it a try.

ShareShareShareShareShare

### Join the RunJS mailing list

You'll receive an occasional newsletter with development updates and articles from the blog. Unsubscribe at any time.