| parrotcode Mathematical Operations | |
| Docs | FAQ | Download | Examples | Talks | Resources | Perl 6 | Languages | Who's Who | Donors | Cage Cleaners | Wiki | |
math.ops - Mathematical Opcodes
Operations that perform some sort of mathematics, including both basic math and transcendental functions.
These operations store the results of arithmetic on other registers and constants into their destination register, $1.
Set $1 to its absolute value.
Set $1 to absolute value of $2.
Increase $1 by the amount in $2.
Set $1 to the sum of $2 and $3.
NOTE: This "uncorrected mod" algorithm uses the C language's built-in mod operator (x % y), which is
... the remainder when x is divided by y, and thus is zero
when y divides x exactly.
...
The direction of truncation for / and the sign of the result
for % are machine-dependent for negative operands, as is the
action taken on overflow or underflow.
-- [1], page 41
Also:
... if the second operand is 0, the result is undefined.
Otherwise, it is always true that (a/b)*b + a%b is equal to z. If
both operands are non-negative, then the remainder is non-
negative and smaller than the divisor; if not, it is guaranteed
only that the absolute value of the remainder is smaller than
the absolute value of the divisor.
-- [1], page 205
This op is provided for those who need it (such as speed-sensitive applications with heavy use of mod, but using it only with positive arguments), but a more mathematically useful mod based on ** floor(x/y) and defined with y == 0 is provided by the mod op.
[1] Brian W. Kernighan and Dennis M. Ritchie, *The C Programming
Language*, Second Edition. Prentice Hall, 1988.
If the denominator is zero, a 'Divide by zero' exception is thrown.
NOTE: This "uncorrected mod" algorithm uses the built-in C math library's fmod() function, which computes
... the remainder of dividing x by y. The return value is
x - n * y, where n is the quotient of x / y, rounded towards
zero to an integer.
-- fmod() manpage on RedHat Linux 7.0
In addition, fmod() returns
the remainder, unless y is zero, when the function fails and
errno is set.
According to page 251 of [1], the result when y is zero is implementation- defined.
This op is provided for those who need it, but a more mathematically useful numeric mod based on floor(x/y) instead of truncate(x/y) and defined with y == 0 is provided by the mod op.
[1] Brian W. Kernighan and Dennis M. Ritchie, *The C Programming
Language*, Second Edition. Prentice Hall, 1988.
If the denominator is zero, a 'Divide by zero' exception is thrown.
Decrease $1 by one.
Divide $1 by $2.
Set $1 to the quotient of $2 divided by $3. In the case of INTVAL division, the result is truncated (NOT rounded or floored). If the denominator is zero, a 'Divide by zero' exception is thrown.
Floor divide $1 by $2.
Set $1 to the quotient of $2 divided by $3. The result is the floor() of the division i.e. the next whole integer towards -inf. If the denominator is zero, a 'Divide by zero' exception is thrown.
Set $1 to the smallest integral value greater than or equal to $1.
Set $1 to the smallest integral value greater than or equal to $2.
Set $1 to the largest integral value less than or equal to $1.
Set $1 to the largest integral value less than or equal to $2.
Increase $1 by one.
Sets $1 to the modulus of $2 and $3.
Sets $1 to the modulus of $1 and $2.
NOTE: This "corrected mod" algorithm is based on the C code on page 70 of [1]. Assuming correct behavior of the built-in mod operator (%) with positive arguments, this algorithm implements a mathematically convenient version of mod, defined thus:
x mod y = x - y * floor(x / y)
For more information on this definition of mod, see section 3.4 of [2], pages 81-85.
References:
[1] Donald E. Knuth, *MMIXware: A RISC Computer for the Third
Millennium* Springer, 1999.
[2] Ronald L. Graham, Donald E. Knuth and Oren Patashnik, *Concrete
Mathematics*, Second Edition. Addison-Wesley, 1994.
Set $1 to the product of $1 and $2.
Set $1 to the product of $2 and $3.
Set $1 to its negative.
Set $1 to the negative of $2.
Set $1 to $2 raised to the power $3.
Decrease $1 by the amount in $2.
Set $1 to $2 minus $3.
Set $1 to the square root of $2.
These operations perform various transcendental operations such as logarithmics and trigonometrics.
Set $1 to the arc cosine (in radians) of $2.
Set $1 to the arc secant (in radians) of $2.
Set $1 to the arc sine (in radians) of $2.
The two-argument versions set $1 to the arc tangent (in radians) of $2.
The three-argument versions set $1 to the arc tangent (in radians) of $2 / $3, taking account of the signs of the arguments in determining the quadrant of the result.
Set $1 to the cosine of $2 (given in radians).
Set $1 to the hyperbolic cosine of $2 (given in radians).
Set $1 to e raised to the power $2. e is the base of the natural logarithm.
Set $1 to the natural (base e) logarithm of $2.
Set $1 to the base 10 logarithm of $2.
Set $1 to the base 2 logarithm of $2.
Set $1 to the secant of $2 (given in radians).
Set $1 to the hyperbolic secant of $2 (given in radians).
Set $1 to the sine of $2 (given in radians).
Set $1 to the hyperbolic sine of $2 (given in radians).
Set $1 to the tangent of $2 (given in radians).
Set $1 to the hyperbolic tangent of $2 (given in radians).
Implementations of various mathematical operations
Greatest Common divisor of $2 and $3.
Least Common Multiple of $2 and $3
Factorial, n!. Calculates the product of 1 to N.
Copyright (C) 2001-2009, Parrot Foundation.
This program is free software. It is subject to the same license as the Parrot interpreter itself.
|
Perl.org sites
: bugs
| dev
| history
| jobs
| learn
| lists
| use
Site Information and Contacts |
|