ChoiceScript’s modulo operator is changing from a simple percent sign `%`

to the word `modulo`

.

If you’ve written code like this:

```
*set remainder X % 12
```

You should upgrade to the latest ChoiceScript on github and use this instead:

```
*set remainder X modulo 12
```

## What's a modulo?

In 2011, I added an advanced operator to ChoiceScript, the “modulo” operator. Here’s how I described it in the Advanced ChoiceScript guide.

You can also use the modulo operator “%” to calculate the remainder after taking a division. Modulo is pretty weird, but it’s has two particularly interesting uses. First, you can check whether a number X is evenly divisible by a number Y by checking whether

`X % Y = 0`

. Second, you can use it to get the fractional part of a number X, the stuff that comes after the decimal point, by calculating`X % 1`

. For example,`3.14 % 1 = 0.14`

.

`modulo`

is the new modulo

Now, instead of a percent sign `%`

you should use the word `modulo`

as the operator.

Here’s the updated documentation:

You can also use the

`modulo`

operator calculate the remainder after taking a division. Modulo is pretty weird, but it’s has two particularly interesting uses. First, you can check whether a number X is evenly divisible by a number Y by checking whether`X modulo Y = 0`

. Second, you can use it to get the fractional part of a number X, the stuff that comes after the decimal point, by calculating`X modulo 1`

. For example,`3.14 modulo 1 = 0.14`

.

## Why change it?

I realized recently that I made a terrible mistake using a percent sign `%`

as the modulo operator; it’s too close to the much more commonly used FairMath operators `%+`

and `%-`

.

That means that when you want to do this:

```
*set strength %+ 20
```

it’s too easy to forget to type a `+`

or a `-`

and do this:

```
*set strength % 20
```

ChoiceScript won’t flag that as an error, because it is valid (but baffling) code. It means the same thing as:

```
*set strength strength % 20
```

That means: take the current strength, divide it by 20 and compute the remainder. So if your Strength was 50, `*set strength % 20`

would set your Strength to be 10. That’s almost certainly not what you wanted.

As of the latest version of ChoiceScript, both `%`

and `modulo`

work, but I’ve updated the Quicktest tool to print a warning if it catches you using `%`

as a modulo operator. The warning will link back to this forum thread, inviting you to fix it by replacing your `%`

with the word `modulo`

.

At some point in the future (months from now, at least; maybe a year?) I’ll probably make a breaking change to ChoiceScript to remove the old `%`

operator entirely. In that case, any use of `%`

will be flagged as an error.

## FairMath Isn't Changing

We’re not changing FairMath at all. `*set strength %+ 20`

still works the same way it used to.

If you don’t already know what “modulo” does, you’ll probably never need it, so don’t worry about it.