[Top]
|
Method `%()
- Method
`%
mixed `%(object arg1, mixed arg2)
mixed `%(mixed arg1, object arg2)
string `%(string arg1, int arg2)
array `%(array arg1, int arg2)
float `%(float arg1, float|int arg2)
float `%(int arg1, float arg2)
int `%(int arg1, int arg2)
- Description
Modulo.
Every expression with the % operator becomes a call to
this function, i.e. a%b is the same as
predef::`%(a,b) .
- Returns
If arg1 is an object that implements lfun::`%() then
that function will be called with arg2 as the single argument.
If arg2 is an object that implements lfun::``%() then
that function will be called with arg2 as the single argument.
Otherwise the result will be as follows:
arg1 can have any of the following types:
string|array | If arg2 is positive, the result will be the last
`%(sizeof (arg1 ), arg2 ) elements of arg1 .
If arg2 is negative, the result will be the first
`%(sizeof (arg1 ), -arg2 ) elements of arg1 .
|
int|float | The result will be
arg1 - arg2 *floor (arg1 /arg2 ) .
The result will be a float if either arg1 or arg2 is
a float, and an int otherwise.
|
|
For numbers, this means that
a % b always has the same sign as b (typically b is positive;
array size, rsa modulo, etc, and a varies a lot more than b).
The function f(x) = x % n behaves in a sane way; as x increases,
f(x) cycles through the values 0,1, ..., n-1, 0, .... Nothing
strange happens when you cross zero.
The % operator implements the binary "mod" operation, as defined
by Donald Knuth (see the Art of Computer Programming, 1.2.4). It
should be noted that Pike treats %-by-0 as an error rather than
returning 0, though.
/ and % are compatible, so that a = b*(a/b) + a%b for all a and b.
- See also
`/
|