.. _IMTH:
``"IMTH"`` Some integer math functions
----------------------------------------
:Fingerprint ID: 0x494d5448
.. versionadded:: 0.5-rc2
This fingerprint, from `RC/Funge-98`__, implements yet another mathematical functions over integers. It provides the following commands:
__ http://www.rcfunge98.com/rcsfingers.html#IMTH
``A`` : *a*\ :sub:`1` ... *a*\ :sub:`n` *n* --- (Σ\ *a*\ :sub:`i`\ ÷\ *n*)
Calculates an average of *n* items (possibly including implicit zeroes under the bottom) from the stack. Reflects if *n* is negative, and pushes zero if *n* is zero.
``B`` : *x* --- *abs(x)*
Calculates the absolute value of *x*.
``C`` : *x* --- *(1000×x)*
Multiplies *x* by 1000.
``D`` : *x* --- *(x-sign(x))*
Decreases the absolute value of *x* if *x* is nonzero, or do nothing if *x* is zero. In principle it is equal to *x* minus the sign function (see ``G`` command) of *x*.
``E`` : *x* --- *(10000×x)*
Multiplies *x* by 10000.
``F`` : *n* --- *n!*
Calculates the factorial of *n*. Reflects if *n* is negative. Strangely enough, it pushes zero (not 1) if *n* is zero. PyFunge retains this behavior for compatibility with RC/Funge-98.
``G`` : *x* --- *sign(x)*
Pushes the sign function of *x*: -1 if *x* is negative, +1 if *x* is positive, and 0 if *x* is zero.
``H`` : *x* --- *(100×x)*
Multiplies *x* by 100.
``I`` : *x* --- *(x+sign(x))*
Increases the absolute value of *x* if *x* is nonzero, or do nothing if *x* is zero. In principle it is equal to *x* plus the sign function (see ``G`` command) of *x*.
``L`` : *x* *c* --- (*x*\ ×2\ :sup:`c`)
Shift *x* left by *c* bits, or right by -*c* bits if *c* is negative. No-op if *c* is zero.
``N`` : *a*\ :sub:`1` ... *a*\ :sub:`n` *n* --- min{*a*\ :sub:`i`}
Calculates a minimum of *n* items (possibly including implicit zeroes under the bottom) from the stack. Reflects if *n* is negative or zero.
``R`` : *x* *c* --- (*x*\ ÷2\ :sup:`c`)
Shift *x* right by *c* bits, or left by -*c* bits if *c* is negative. No-op if *c* is zero.
``S`` : *a*\ :sub:`1` ... *a*\ :sub:`n` *n* --- (Σ\ *a*\ :sub:`i`)
Calculates a sum of *n* items (possibly including implicit zeroes under the bottom) from the stack. Reflects if *n* is negative, and pushes zero if *n* is zero.
``T`` : *x* --- *(10×x)*
Multiplies *x* by 10.
``U`` : *x* ---
Prints *x* as an unsigned integer. Note that PyFunge prints only lower 32 bits of *x* since this command requires the size of integer to be finite.
``X`` : *a*\ :sub:`1` ... *a*\ :sub:`n` *n* --- max{*a*\ :sub:`i`}
Calculates a maximum of *n* items (possibly including implicit zeroes under the bottom) from the stack. Reflects if *n* is negative or zero.
``Z`` : *x* --- *-x*
Negates the sign of *x*.