Difference between revisions of "Help:Modulo and round"

From lensowiki
Jump to: navigation, search
(omitting spaces doesn't improve readability)
 
m (1 revision(s))
(No difference)

Revision as of 05:34, 19 July 2006

 

The MediaWiki extension ParserFunctions enables users to perform simple mathematical computations.

#expr and #ifexpr allow mod and round.

Operator Operation Example
mod "Modulo", remainder of division after truncating both operands to an integer.

Caveat, mod is different from all programming languages. This has been fixed (but needs to be committed), see bugzilla:6068.
Template:Evaldemo
Template:Evaldemo
Template:Evaldemo
Template:Evaldemo (should be 2.6)
Template:Evaldemo (should be 1.6)
Template:Evaldemo (should be 2.9)
round Rounds off the number on the left to the power of 1/10 given on the right Template:Evaldemo
Template:Evaldemo
{{ #expr: 3456 round -2}} = 3500

Spaces around mod and round are good for readability but not needed for working properly:

  • {{#expr:7mod3}} gives 1
  • {{#expr:7.5round0}} gives 8

Precedence:

(first additions, then round)

(mod and multiplication have equal precedence, evaluation from left to right)

To remind the reader of the precedence, one might write:

When using spaces where there is precedence, the layout of the expression may be confusing:
Template:Evaldemo
Instead one can write:
Template:Evaldemo
or simply use parentheses:
Template:Evaldemo

Mod

To get a positive mod even for a negative number, use e.g. (700000 + x) mod7 instead of x mod7. The range of the result is now 0-6, provided that x > -700000.

Alternatively, use

  • 6 - ( 700006 - x ) mod7

or

  • (x - 700006) mod7 + 6.

The range of the result is 0-6, provided that x < 700006.

Working for all x is:

  • (x mod7 + 7) mod7

Round

  • {{#expr:2.5 round 0}} gives 3
  • {{#expr:-2.5 round 0}} gives -3

To round an integer plus one half for x > -100000 toward plus infinity, use:

  • (x + 100000 round 0) - 100000

and to round an integer plus one half for x < 100000 toward minus infinity, use:

  • (x - 100000 round 0) + 100000

To round x toward minus infinity, use:

  • x + ( x != x round 0 ) * ( ( ( x - .5 ) round 0 ) - x )

and toward plus infinity

  • x + ( x != x round 0 ) * ( ( ( x + .5 ) round 0 ) - x )

If x is a long expression this multiplies the length by 5! Under conditions for x there are alternatives:

To round x > -100000 toward minus infinity, use:

  • (x - 100000.5 round 0) + 100000

and to round x < 100000 toward plus infinity, use:

  • (x + 100000.5 round 0) - 100000

If x is a multiple of 1/n with n<1000 we can round toward minus infinity with:

  • x - .499 round 0

For arbitrary n > 1 we can choose instead of -.499 any number between -.5 and -.5 + 1/n.

To find the largest multiple of 7 not larger than x (i.e. to round toward minus infinity to a multiple of 7) we can do:

  • ((x-3)/7 round 0) * 7

See also

http://www.fayeunrauphotography.com/ kjøp cialis 520853 http://www.primetermites.com/ ジェネリックバイアグラ 5575 http://www.witch-ring.com/Generic-Viagra/ Comprando viagra sfnjy http://www.flweaver.com/ online Cialis kmt http://www.blogdemoteros.com/ tadalafil 5271