Changes to Math Functions
We are making changes to some of the math functions, in particular the trigonometric and logarithmic functions.
To do that we also need to rename the existing
log function, used for debugging.
Pencil Code is being used for more and more things! One area we looked at recently was use of the trigonometric functions.
tan, and their inverse forms,
atan2. Those functions are useful
for dealing with angles, such as when doing turtle geometry. Turtle turns are expressed in units of degrees, so it helps
that the trig functions measure angles in degrees.
When you learn trigonometry in high school and beyond, measurement of angles switches to radians. Some Pencil Code users
Math library has trig functions in radians. We noticed that
many Pencil Code programs use
Math.sin, and so on.
Both degrees and radians are useful, for different types of programs. We have decided to incorporate both forms of the
trig functions directly into Pencil Code, and make a clear distinction between them. In doing so, we follow the lead of
mathematical languages such as Fortran, MatLab, and Wolfram Alpha.
will operate in degrees, and
atan will operate in radians.
One further change we're making is to remove
atan2. Of course, that function is very useful, so we're
incorporating what it does into
atand. If you provide two arguments to
atand, they will act like
atan2d would act. You can think of
atand as being 2-argument functions, where the second argument defaults to 1:
atan = (y, x = 1) -> ... atand = (y, x = 1) -> ...
So we're changing the behavior of the old trig functions. They used to operate in degrees, and now operate in radians.
To minimize the impact of this change, we have modified most of your existing programs that use old trig functions, to use
the new degrees forms. Those modified programs should continue to work, just as before. There were a few programs where we
weren't sure what to do. We left those alone. We did not change existing uses of the
Math. forms of the trig
functions. But if you wanted to, you could switch to the shorter names, and your program will continue to work as it did.
Another change we will make (not yet, but soon) involves the logarithmic functions,
log10. We will remove them
and replace them with a single
log function that takes an optional second argument. If you call
log with a single argument,
the function will return the natural logarithm, just as the existing
ln function does now. If you supply a second argument,
it specifies the base of the logarithm. So
log(x, 10) will return the log base 10, just as
log10(x) would now.
But as you can imagine, you can use other numbers for the base, as needed for your problem. For example,
log(x, 2) might be
useful for figuring out how many bits are needed to encode a number in binary.
log is currently a function useful for printing things while you're debugging. To prepare for the
upcoming change, we have added a new function,
debug, which will do the debug printing that
log currently does.
log still exists and will do what it has been doing, but it will be noted as deprecated. We have
modified your existing programs that use
log to use
debug instead. Some of you figured out that you could use
console.log function to do this debug printing. That will continue to work, and we did not change
those uses. For now we have left uses of
log10 intact. We will change those when we change
be the logarithm function, instead of the debugging function.
Enjoy the new, expanded set of math functions, to do even more great things with Pencil Code!Bob Cassels