Math++

Math++ is an esoteric programming language by SuperJedi224, defined by this java implementation.
All Math++ variables are 64-bit IEEE 754 floats. The language has 26 variables (each represented by a lowercase letter) and a Map data structure.
==Syntax==
The program consists of one or more lines, each of which consists of an expression optionally followed by a greater than symbol (">") then a target designator.
The following target designators are recognized:
 out
The default target designator, which is used implicitly when none is specified. Prints the result to stdout.
 <any variable name>
Stores the result to that variable
 {<any value>}
Associates the result with the specified key in the map
 $
Round the result towards zero and go to that line. Going to line zero is treated as an exit statement, going to any other out-of-bounds line number yields an exception.
==Language features==
===Binary Operators===
In descending order by precedence, Math++ has the following binary operators (parentheses may be used to modify the order of operations as needed):
====Modulus====
 a%b
Equivalent to (a-b*_(a/b))
====Division====
 a/b
Returns the quotient of a and b.
====Multiplication====
 a*b
Returns the product of a and b.
====Subtraction====
 a-b
Returns the difference of a and b.
====Addition====
 a+b
Returns the sum of a and b.
====Boolean AND====
 a&b
Short-circuiting logical AND operator. Returns 0 if a is zero, !!b otherwise.
====Boolean OR====
 a|b
Short-circuiting logical OR operator. Returns a if a is nonzero, b otherwise.
===Unary Operators===
Math++ also has the following Unary operators (which always have higher precedence than any binary operators):
====Unary Minus====
 -a
Returns -1*a.
====Common Logarithm====
 log a
The space is optional but should typically be included for readability. Returns log10(a). Yields -Infinity when a=0, and NaN when a<0.
====Natural Logarithm====
 ln a
The space is optional but should typically be included for readability. Returns loge(a). Yields -Infinity when a=0, and NaN when a<0.
====Sine====
 sin a
The space is optional but should typically be included for readability. Returns sine(a). Uses radians.
====Cosine====
 cos a
The space is optional but should typically be included for readability. Returns cosine(a). Uses radians.
====Tangent====
 tan a
The space is optional but should typically be included for readability. Returns tangent(a). Uses radians.
====Secant====
 sec a
The space is optional but should typically be included for readability. Returns secant(a)=1/cosine(a). Uses radians.
====Cosecant====
 csc a
The space is optional but should typically be included for readability. Returns cosecant(a)=1/sine(a). Uses radians.
====Cotangent====
 cot a
The space is optional but should typically be included for readability. Returns cotangent(a)=1/tangent(a). Uses radians.
====Square Root====
 sqrt a
The space is optional but should typically be included for readability. Returns the square root of a (NaN if a is negative).
====Cube Root====
 cbrt a
The space is optional but should typically be included for readability. Returns the cube root of a.
====Floor====
 _a
Returns a rounded down (towards zero) to the nearest integer.
====Boolean NOT====
 !a
Returns 1 if a is 0, and 0 otherwise.
====Absolute Value====
 abs a
The space is optional, but should typically be included for readability. Returns the absolute value of a.
===IO===
Output, as mentioned above, is handled by using the target designator "out" or by omitting the target designator on an expresssion.
A number can be taken from the input by using a question mark (?) in an expression.
===Constants===
The following special expressions return constant values:
 $e
Returns Euler's number.
 $pi
Returns pi.
 $phi
Returns phi=(1+sqrt(5))/2.
===Pseudorandom Values===
A pseudorandom value between 0 and 1 (potentially including zero, but not including one) can be generated by using the special expression "$rand".
===Using the Map===
As was explained in the syntax section, associating a value with a key in the map can be done using {<key>} as the target designator for an expression producing the value.
Retrieving the value associated with a key can likewise be done by using {<key>} in an expression.
==Sample Programs==
===Truth Machine===
 2+2*!?>$
 1>out
 2>$
 0>out
===Countdown from 100===
 100>a
 a>out
 a-1>a
 2*!!a>$
===Square Root of input===
 sqrt?
===Sum of two inputs===
 ?+?
===Square of input===
 ?>a
 a*a>out
Category:Languages
Category:Implemented
Category:Turing complete
Category:2015