From WikiChip
Editing mirc/identifiers/$calc
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.
The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
This page supports semantic in-text annotations (e.g. "[[Is specified as::World Heritage Site]]") to build structured and queryable content provided by Semantic MediaWiki. For a comprehensive description on how to use annotations or the #ask parser function, please have a look at the getting started, in-text annotation, or inline queries help pages.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
− | {{mirc title|$calc Identifier}}'''$calc''' can be used to perform mathematical calculations from the mIRC editbox line, or from inside of a custom script | + | {{mirc title|$calc Identifier}}'''$calc''' can be used to perform mathematical calculations from the mIRC editbox line, or from inside of a custom script. |
== Synopsis == | == Synopsis == | ||
<pre>$calc(operations)</pre> | <pre>$calc(operations)</pre> | ||
Line 9: | Line 9: | ||
== Operators == | == Operators == | ||
− | + | When parenthesis are not used to override the order of evaluation, these are the operators and the order in which they are used in calculating the result: | |
− | + | <span style="display: inline-block; width: 30px;">'''^'''</span>1. Exponent | |
− | <span style="display: inline-block; width: 30px;">''' | + | <span style="display: inline-block; width: 30px;">'''//'''</span>2. Floor division, same as $floor($calc(X / Y)) |
− | <span style="display: inline-block; width: 30px;">''' | + | <span style="display: inline-block; width: 30px;">'''%'''</span>3. Modulus (remainder when dividing X / Y ) |
− | <span style="display: inline-block; width: 30px;">''' | + | <span style="display: inline-block; width: 30px;">'''*'''</span>4. Multiplication |
− | <span style="display: inline-block; width: 30px;">''' | + | <span style="display: inline-block; width: 30px;">'''/'''</span>4. Division |
− | <span style="display: inline-block; width: 30px;">''' | + | <span style="display: inline-block; width: 30px;">'''+'''</span>5. Addition |
− | <span style="display: inline-block; width: 30px;">''' | + | <span style="display: inline-block; width: 30px;">'''-'''</span>5. Subtraction |
− | + | '''Parenthesis used to demonstrate the order:''' | |
− | + | <pre>//echo -a $calc( 99 // 4 ^ .5 % 11 * 2 + 1) is same as $calc( ((( 99 // (4 ^ .5)) % 11) * 2) + 1)</pre> | |
− | |||
− | |||
− | |||
− | '''Parenthesis used to demonstrate the order | ||
− | <pre>//echo -a $calc( 99 | ||
− | |||
− | |||
− | |||
− | |||
− | </pre> | ||
== Examples == | == Examples == | ||
'''Echo a simple addition calculation to the active window''' | '''Echo a simple addition calculation to the active window''' | ||
Line 64: | Line 54: | ||
<source lang="mIRC"> | <source lang="mIRC"> | ||
− | Modulus of N1/N2 is often seen as a number 0 through | + | Modulus of N1/N2 is often seen as a number 0 through N2 less 1, but that applies only to integers. It's the remainder (not the fraction) when dividing the numerator by the denominator. |
//var %x -10 , %y 3.14 | echo -a $calc(%x - %y * $int($calc( %x / %y))) vs $calc(%x % %y) | //var %x -10 , %y 3.14 | echo -a $calc(%x - %y * $int($calc( %x / %y))) vs $calc(%x % %y) | ||
* Shows -0.58 vs -0.58 | * Shows -0.58 vs -0.58 | ||
− | Order of Operation PEMDAS means Multiplication and Division | + | Order of Operation PEMDAS means Multiplication and Division are applied at the same time, as do Addition and subtraction together. It does not mean doing all multiplications before any divisions, nor doing all additions before doing any subtractions. |
//echo -a $calc( 2 / 4 * 5 ) | //echo -a $calc( 2 / 4 * 5 ) | ||
Line 75: | Line 65: | ||
yields 4 because it goes left-to-right performing adds and subtracts. It subtracts 3 from 2 = -1, then adds 5. | yields 4 because it goes left-to-right performing adds and subtracts. It subtracts 3 from 2 = -1, then adds 5. | ||
− | //echo -a $calc( | + | //echo -a $calc( -2^8*3-1 ) |
+ | //echo -a $calc( 0-2^8*3-1 ) | ||
produce 2 different answers because the presence of the 0 changes the meaning of the hyphen. In the 1st example it's -2 to the 8th power which is +256. That's then multiplied by 3, before having 1 subtracted from it. In the 2nd example, it starts by taking 2 to the 8th power, then multiplying by 3 to obtain the 2nd term 768. Then it starts with zero, subtracts the 768, then subtracts another 1. | produce 2 different answers because the presence of the 0 changes the meaning of the hyphen. In the 1st example it's -2 to the 8th power which is +256. That's then multiplied by 3, before having 1 subtracted from it. In the 2nd example, it starts by taking 2 to the 8th power, then multiplying by 3 to obtain the 2nd term 768. Then it starts with zero, subtracts the 768, then subtracts another 1. | ||
− | |||
− | |||
− | |||
</source> | </source> | ||
Line 90: | Line 78: | ||
//echo -a $calc(9007199254740993) vs $calc(900719925474099.3) returns 9007199254740992 vs 900719925474099.25 | //echo -a $calc(9007199254740993) vs $calc(900719925474099.3) returns 9007199254740992 vs 900719925474099.25 | ||
− | $calc has reduced accuracy for larger integers, and even lower accuracy for fractions of | + | $calc has reduced accuracy for larger integers, and even lower accuracy for fractions of lower numbers. This inaccuracy is often reflected in other identifiers which use same stored values used by $calc. |
For example, $base can't be trusted to be accurate when handling values larger than 2^53. | For example, $base can't be trusted to be accurate when handling values larger than 2^53. | ||
//echo -a $base($str(f,14),16,16) returns 100000000000000 | //echo -a $base($str(f,14),16,16) returns 100000000000000 | ||
− | |||
− | |||
− | |||
− | |||
if() can sometimes return inaccurate results for values larger than 2^53. For example, this executes as if $true: | if() can sometimes return inaccurate results for values larger than 2^53. For example, this executes as if $true: | ||
//if (18014398509481984 == 18014398509481985) echo match | //if (18014398509481984 == 18014398509481985) echo match | ||
− | + | $calc limits output to 6 decimals, with trailing zeroes dropped. | |
− | |||
− | $calc | ||
//echo -a $pi vs $calc($pi) | //echo -a $pi vs $calc($pi) | ||
− | |||
− | |||
− | |||
//echo -a $calc( 123 + 1abc + 2def ) | //echo -a $calc( 123 + 1abc + 2def ) | ||
Line 123: | Line 102: | ||
//echo -a $calc( 5 ^ $+ + .1) | //echo -a $calc( 5 ^ $+ + .1) | ||
− | When the $+ is inside additional parenthesis, the entire result is zero: | + | When the $+ is inside additional parenthesis, the entire result is zero. However when $+ is inside a variable, it is handled correctly: |
− | // | + | //var %a 123 + ( 1 $+ 23 ) | echo -a $calc( %a ) vs $calc( 123 + ( 1 $+ 23 ) ) |
− | + | </source> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
See also the $calc section at {{mIRC|msl_injection#$calc()}} | See also the $calc section at {{mIRC|msl_injection#$calc()}} | ||
− | + | == Compatability == | |
− | == | ||
{{mIRC compatibility|5.1}} | {{mIRC compatibility|5.1}} | ||
− | |||
== See Also == | == See Also == | ||
* {{mIRC|$base}} | * {{mIRC|$base}} |