Difference between revisions of "Odd"
(rewrite, remove erroneous classification as an operator) |
m (resolve a redlink caused by case-sensitivity of page names in this Wiki) |
||
Line 1: | Line 1: | ||
{{Odd}} | {{Odd}} | ||
− | The [[Standard Functions|standard function]] {{Doc|package=RTL|unit=system|identifier=odd|text='''<syntaxhighlight lang="pascal" inline>odd</syntaxhighlight>'''}} returns [[ | + | The [[Standard Functions|standard function]] {{Doc|package=RTL|unit=system|identifier=odd|text='''<syntaxhighlight lang="pascal" inline>odd</syntaxhighlight>'''}} returns [[True|<syntaxhighlight lang="pascal" inline>true</syntaxhighlight>]] if and only if the passed [[Integer|<syntaxhighlight lang="pascal" inline>integer</syntaxhighlight>]] parameter is odd, that means it is not divisible by <syntaxhighlight lang="pascal" inline>2</syntaxhighlight>. |
<syntaxhighlight lang="pascal" inline>Odd(x)</syntaxhighlight> is by definition equivalent to the [[expression]] | <syntaxhighlight lang="pascal" inline>Odd(x)</syntaxhighlight> is by definition equivalent to the [[expression]] | ||
<syntaxhighlight lang="pascal">abs(x) mod 2 = 1</syntaxhighlight> | <syntaxhighlight lang="pascal">abs(x) mod 2 = 1</syntaxhighlight> |
Revision as of 16:24, 25 August 2022
│
Deutsch (de) │
English (en) │
polski (pl) │
The standard function odd
returns true
if and only if the passed integer
parameter is odd, that means it is not divisible by 2
.
Odd(x)
is by definition equivalent to the expression
abs(x) mod 2 = 1
The abs
serves the purpose of any potential for confusion regarding the sign of the mod
operator in conjunction with a negative operand.
It is unnecessary in a fully-ISO‑compliant compiler (for FPC this means {$modeSwitch ISOMod+}
).
application
Beside using odd
directly, in combination with ord
it can be useful to simplify calculations.
The following program
calculates [math]\displaystyle{ 1 \cdot 3^1 + 2 \cdot 3^0 + 3 \cdot 3^1 + 4 \cdot 3^0 }[/math] (= [math]\displaystyle{ 3 + 2 + 9 + 4 }[/math]) without the need of branches:
{$mode extendedPascal}
program oddDemo(output);
var
i, sum: integer value 0;
begin
for i := 1 to 4 do
begin
{ alternating scale factor 3^0, 3^1 based on Boolean }
sum := sum + i * 3 pow ord(odd(i));
end;
writeLn(sum);
end.
NB:
Despite {$mode extendedPascal}
the shown integer
power operator pow
and initial-value specification are not yet supported by FPC as of version 3.2.0.
notes
- There is no standard built‑in function “
even
”. Obviously the expressionnot odd(x)
determines whether aninteger
is even. - For constant expressions,
odd
can be evaluated at compile-time, thus it can appear in theconst
section. - On most architectures
odd
can be implemented as a simpleand x, 1
, that is by masking the least-significant bit in a value. For these platforms, using type helpers from thesysUtils
unit,x.testBit(0)
has the same return value.