Predicates and functions in this group are used to perform arithmetic and string operations. String operations are further subdivided into operations on UTF-8 character strings, and operations on strings of raw bytes.
Predicates: is/2, (=:=)/2, (=!=)/2, (<)/2, (<=)/2, (>)/2, (>=)/2, atom_name/2, fperror/1, isnan/1, isinf/1, randomize/0, randomize/1
Mathematical operators: (+)/2, (-)/1, (-)/2, (*)/2, (/)/2, (%)/2, (**)/2, mod/2, rem/2
Mathematical functions: abs/1, ceil/1, exp/1, float_fractional_part/1, float_integer_part/1, floor/1, log/1, pow/2, round/1, sign/1, sqrt/1, truncate/1
Mathematical constants: e/0, inf/0, nan/0, pi/0
Trigonometric functions: acos/1, asin/1, atan/1, atan2/2, cos/1, sin/1, tan/1
Bitwise operators: (/\)/2, (\/)/2, (^)/2, (~)/2, (<<)/2, (>>)/2, (>>>)/2
Type conversion functions: float/1, integer/1, string/1, string/2
UTF-8 string functions: char/2, char_to_string/1, left/2, length/1, mid/2, mid/3, right/2
Byte string functions: byte/2, byte_to_string/1, left_bytes/2, length_bytes/1, mid_bytes/2, mid_bytes/3, right_bytes/2
Random number generation: random/0
instantiation_error - An unbound variable was encountered in a subexpression. type_error(evaluable, Expr) - Expr is not an integer constant, floating-point constant, string constant, or defined arithmetic function. type_error(number, Expr) - Expr is not a number but it was used as an argument to an arithmetic function that requires a number. type_error(integer, Expr) - Expr is not an integer but it was used as an argument to an arithmetic function that requires an integer. type_error(string, Expr) - Expr is not a string but it was used as an argument to an arithmetic function that requires a string. evaluation_error(zero_divisor) - Expr attempted to divide by zero. evaluation_error(int_overflow) - a conversion to the integer type resulted in an overflow because the incoming value was too large. Note: ordinary mathematical and bitwise operators on integers like (+)/2, (*)/2, (<<)/2, etc do not report overflow.X is Y + 1 S is sin(Angle * pi / 180)
2 + 4 =:= 6 1.5 =:= 3.0 / 2 "foo" + "bar" =:= "foobar"
2 + 2 =!= 5 1.5 =!= 3.0 * 2 "foo" + "ba" =!= "foobar"
2 + 2 < 5 1.5 < 3.0 * 2 "foo" + "ba" < "foobar"
2 + 2 <= 4 1.5 <= 3.0 * 2 1.5 <= 3.0 * 0.5 "foo" + "ba" <= "foobar"
2 + 2 > 3 3.0 * 2 > 1.5 "foobar" > "foo" + "ba"
2 + 2 >= 4 3.0 * 0.5 >= 1.5 "foobar" >= "foo" + "ba"
instantiation_error - both Atom and String are variables. type_error(atom, Atom) - Atom is not an atom or variable. type_error(string, String) - Atom is a variable and String is not a string. atom_name(foobar, S)         sets S to "foobar"
 atom_name('hi there!', S)    sets S to "hi there!"
 atom_name(A, "foobar")       sets A to foobar
 atom_name(A, "")             sets A to ''
 atom_name(foobar, "barfoo")  fails
 atom_name(A, S)              instantiation_error
 atom_name(1.5, S)            type_error(atom, 1.5)
 atom_name(A, foobar)         type_error(string, foobar)
clear, then clear all of the floating-point exception flags in the system and succeed. Otherwise, test for a specific floating-point exception and succeed if it is present. If Type is not recognized, or the exception has not been raised, then fperror(Type) fails.inexact - result could not be represented exactly. overflow - overflow occurred. undefined - result was undefined (not-a-number). underflow - underflow occurred. zero_divisor - division by zero.clear and fail for all other arguments. The isnan/1 and isinf/1 predicates may be used to detect certain error conditions.instantiation_error - Type is a variable. type_error(atom, Type) - Type is not an atom.fperror(clear); X is Y / Z; if (fperror(zero_divisor)) stderr::writeln("division by zero occurred");
 isnan(nan)               succeeds
 isnan(float("nan"))      succeeds
 isnan(3)                 fails
 isnan(inf)               fails
 isnan("nan")             type_error(number, "nan")
isinf(inf) succeeds isinf(-inf) succeeds isinf(float("inf")) succeeds isinf(float("-inf")) succeeds isinf(3) fails isinf(nan) fails isinf("inf") type_error(number, "inf") isinf(X); X < 0 checks for negative infinity isinf(X); X > 0 checks for positive infinity
instantiation_error - Value is a variable. type_error(number, Value) - Value is not a number.randomize randomize(42)
type_error(number, Expr2) - Expr1 is a number, but Expr2 is not. type_error(string, Expr2) - Expr1 is a string, but Expr2 is not.X is 2 + 2 sets X to the integer value 4 X is 1.5 + 3 sets X to the floating-point value 4.5 X is "foo" + "bar" sets X to the string "foobar" X is 1 + "foo" type_error(number, "foo") X is "foo" + 1 type_error(string, 1) X is "foo" + string(1) sets X to the string "foo1"
-2 == - 2 will fail, but -2 =:= - 2 will succeed.type_error(number, Expr) - Expr is not a number.X is - 2 sets X to the integer value -2 X is - 1.5 sets X to the floating-point value -1.5 X is - "foo" type_error(number, "foo") X is --2 sets X to the integer value 2
type_error(number, Expr1) - Expr1 is not a number. type_error(number, Expr2) - Expr2 is not a number.X is 2 - 2 sets X to the integer value 0 X is 1.5 - 3 sets X to the floating-point value -1.5 X is 1 - "foo" type_error(number, "foo") X is "foo" - 1 type_error(number, "foo")
type_error(number, Expr1) - Expr1 is not a number. type_error(number, Expr2) - Expr2 is not a number.X is 2 * 2 sets X to the integer value 4 X is 1.5 * 3 sets X to the floating-point value 4.5 X is 1 * "foo" type_error(number, "foo") X is "foo" * 1 type_error(number, "foo")
type_error(number, Expr1) - Expr1 is not a number. type_error(number, Expr2) - Expr2 is not a number. evaluation_error(zero_divisor) - Expr2 is zero and an integer division is being performed. Floating-point division will produce not-a number (nan/0) or an infinity (inf/0) if Expr2 is zero.X is 2 / 2 sets X to the integer value 1 X is 1.5 / 3 sets X to the floating-point value 0.5 X is 1 / "foo" type_error(number, "foo") X is "foo" / 1 type_error(number, "foo") X is 42 / 0 evaluation_error(zero_divisor) X is 42 / 0.0 sets X to positive infinity X is 0.0 / 0.0 sets X to not-a-number
 X is Y / Z               X is float(Y) / float(Z)
 X is Y // Z              X is integer(Y) / integer(Z)
type_error(number, Expr1) - Expr1 is not a number. type_error(number, Expr2) - Expr2 is not a number. evaluation_error(zero_divisor) - Expr2 is zero and an integer division is being performed. Floating-point remainder will produce not-a number (nan/0) if Expr2 is zero.X is 2 % 2 sets X to the integer value 0 X is 3 % 2 sets X to the integer value 1 X is 1.5 % 3 sets X to the floating-point value 1.5 X is 1 % "foo" type_error(number, "foo") X is "foo" % 1 type_error(number, "foo") X is 42 % 0 evaluation_error(zero_divisor) X is 42 % 0.0 sets X to not-a-number
type_error(number, Expr1) - Expr1 is not a number. type_error(number, Expr2) - Expr2 is not a number. evaluation_error(zero_divisor) - Expr2 is zero and an integer division is being performed. Floating-point remainder will produce not-a number (nan/0) if Expr2 is zero.X is 2 rem 2 sets X to the integer value 0 X is 3 rem 2 sets X to the integer value 1 X is 1.5 rem 3 sets X to the floating-point value 1.5 X is 1 rem "foo" type_error(number, "foo") X is "foo" rem 1 type_error(number, "foo") X is 42 rem 0 evaluation_error(zero_divisor) X is 42 rem 0.0 sets X to not-a-number
/\ Expr2 type_error(integer, Expr1) - Expr1 is not an integer. type_error(integer, Expr2) - Expr2 is not an integer. X is 22 /\\ 5            X is set to 4
 X is 22.0 /\\ 5          type_error(integer, 22.0)
 X is 22 /\\ 5.0          type_error(integer, 5.0)
\/ Expr2 type_error(integer, Expr1) - Expr1 is not an integer. type_error(integer, Expr2) - Expr2 is not an integer. X is 22 \\/ 5            X is set to 23
 X is 22.0 \\/ 5          type_error(integer, 22.0)
 X is 22 \\/ 5.0          type_error(integer, 5.0)
^ Expr2 type_error(integer, Expr1) - Expr1 is not an integer. type_error(integer, Expr2) - Expr2 is not an integer. X is 22 ^ 5              X is set to 19
 X is 22.0 ^ 5            type_error(integer, 22.0)
 X is 22 ^ 5.0            type_error(integer, 5.0)
~ Expr \ Expr type_error(integer, Expr) - Expr is not an integer. X is ~22                 X is set to -23
 X is ~22.0               type_error(integer, 22.0)
type_error(integer, Expr1) - Expr1 is not an integer. type_error(integer, Expr2) - Expr2 is not an integer. X is 22 << 5             X is set to 704
 X is 22.0 << 5           type_error(integer, 22.0)
 X is 22 << 5.0           type_error(integer, 5.0)
type_error(integer, Expr1) - Expr1 is not an integer. type_error(integer, Expr2) - Expr2 is not an integer.X is 22 >> 5 X is set to 0 X is -22 >> 5 X is set to -1 X is 22.0 >> 5 type_error(integer, 22.0) X is 22 >> 5.0 type_error(integer, 5.0)
type_error(integer, Expr1) - Expr1 is not an integer. type_error(integer, Expr2) - Expr2 is not an integer.X is 22 >>> 5 X is set to 0 X is -22 >>> 5 X is set to 134217727 (0x07ffffff) X is 22.0 >>> 5 type_error(integer, 22.0) X is 22 >>> 5.0 type_error(integer, 5.0)
type_error(number, Expr) - Expr is not a number. evaluation_error(int_overflow) - Expr is the integer -2147483648, which cannot be negated to produce a positive integer value. X is abs(3)              X is set to 3
 X is abs(-35.125)        X is set to 35.125
 X is abs(-inf)           X is set to inf
 X is abs(nan)            X is set to nan
 X is abs("-35")          type_error(number, "-35")
 X is abs(-2147483648)    evaluation_error(int_overflow)
type_error(number, Expr) - Expr is not a number. X is acos(1)             sets X to 0.0
 X is acos(0.0)           sets X to pi / 2
 X is acos(inf)           sets X to nan
 X is acos(nan)           sets X to nan
 X is acos("1.0")         type_error(number, "1.0")
type_error(number, Expr) - Expr is not a number. X is asin(0)             sets X to 0.0
 X is asin(1.0)           sets X to pi / 2
 X is asin(inf)           sets X to nan
 X is asin(nan)           sets X to nan
 X is asin("1.0")         type_error(number, "1.0")
type_error(number, Expr) - Expr is not a number. X is atan(1.0)           sets X to pi / 4
 X is atan(0)             sets X to 0.0
 X is atan(inf)           sets X to pi / 2
 X is atan(nan)           sets X to nan
 X is atan("1.0")         type_error(number, "1.0")
type_error(number, Expr1) - Expr1 is not a number. type_error(number, Expr2) - Expr2 is not a number. X is atan2(1.0, 1.0)     sets X to pi / 4
 X is atan2(0, 1)         sets X to 0.0
 X is atan2(0, -1)        sets X to pi
 X is atan2(inf, 2)       sets X to pi / 2
 X is atan2(nan, 1)       sets X to nan
 X is atan2(1, nan)       sets X to nan
 X is atan2("2.0", 1.0)   type_error(number, "2.0")
 X is atan2(2.0, "1.0")   type_error(number, "1.0")
type_error(number, Expr) - Expr is not a number. X is ceil(3)             X is set to 3
 X is ceil(35.125)        X is set to 36.0
 X is ceil(-35.125)       X is set to -35.0
 X is ceil(0.0)           X is set to 0.0
 X is ceil(-inf)          X is set to -inf
 X is ceil(nan)           X is set to nan
 X is ceil("-35")         type_error(number, "-35")
type_error(string, Expr) - Expr is not a string. type_error(integer, Index) - Index is not an integer. domain_error(string_index, Index) - Index is out of range for Expr.X is byte("foobar", 3) X is set to 98 (character code of 'b') X is byte(1.5, 2) type_error(string, 1.5) X is byte("foobar", 3.0) type_error(integer, 3.0) X is byte("foobar", -1) domain_error(string_index, -1) X is byte("foobar", 6) domain_error(string_index, 6)
type_error(integer, Expr) - Expr is not an integer. type_error(byte, Expr) - Expr is an integer that is not within the range 0 to 255.X is byte_to_string(98) X is set to "b" X is byte_to_string(0xC1) X is set to "\xC1" X is byte_to_string(1.5) type_error(integer, 1.5) X is byte_to_string(-1) type_error(byte, -1)
type_error(string, Expr) - Expr is not a string. type_error(integer, Index) - Index is not an integer. domain_error(string_index, Index) - Index is out of range for Expr.X is char("foobar", 3) X is set to 98 (character code of 'b') X is char("\u00AF", 0) X is set to 0x00AF X is char(1.5, 2) type_error(string, 1.5) X is char("foobar", 3.0) type_error(integer, 3.0) X is char("foobar", -1) domain_error(string_index, -1) X is char("foobar", 6) domain_error(string_index, 6) X is char("\u00AF", 1) domain_error(string_index, 1)
type_error(integer, Expr) - Expr is not an integer. representation_error(character_code) - Expr is an integer that does not correspond to a valid character code.X is char_to_string(98) X is set to "b" X is char_to_string(0x00AF) X is set to "\u00AF" X is char_to_string(1.5) type_error(integer, 1.5) X is char_to_string(-1) representation_error(character_code)
type_error(number, Expr) - Expr is not a number. X is cos(0)              sets X to 1.0
 X is cos(pi / 2)         sets X to 0.0
 X is cos(inf)            sets X to nan
 X is cos(nan)            sets X to nan
 X is cos("1.0")          type_error(number, "1.0")
type_error(number, Expr) - Expr is not a number. X is exp(1)              X is set to e
 X is exp(0)              X is set to 1.0
 X is exp(2.0)            X is set to e * e
 X is exp(-2.0)           X is set to 1 / (e * e)
 X is exp(inf)            X is set to inf
 X is exp(-inf)           X is set to 0.0
 X is exp(nan)            X is set to nan
 X is exp("2.0")          type_error(number, "2.0")
E2 is e * 2
F is float(3) F is set to 3.0 F is float(3.5) F is set to 3.5 (no change) F is float(2 + 6) F is set to 8.0 F is float("-3.5e02") F is set to -350.0 (string conversion) F is float("foo") type_error(number, "foo") F is float('3.5') type_error(evaluable, '3.5')
type_error(number, Expr) - Expr is not a number. X is float_fractional_part(3)        X is set to 0
 X is float_fractional_part(35.125)   X is set to 0.125
 X is float_fractional_part(-35.125)  X is set to -0.125
 X is float_fractional_part(0.0)      X is set to 0.0
 X is float_fractional_part(-inf)     X is set to 0.0
 X is float_fractional_part(nan)      X is set to nan
 X is float_fractional_part("-35")    type_error(number, "-35")
type_error(number, Expr) - Expr is not a number. X is float_integer_part(3)           X is set to 3
 X is float_integer_part(35.125)      X is set to 35.0
 X is float_integer_part(-35.125)     X is set to -35.0
 X is float_integer_part(0.0)         X is set to 0.0
 X is float_integer_part(-inf)        X is set to -inf
 X is float_integer_part(nan)         X is set to nan
 X is float_integer_part("-35")       type_error(number, "-35")
type_error(number, Expr) - Expr is not a number. X is floor(3)            X is set to 3
 X is floor(35.125)       X is set to 35.0
 X is floor(-35.125)      X is set to -36.0
 X is floor(0.0)          X is set to 0.0
 X is floor(-inf)         X is set to -inf
 X is floor(nan)          X is set to nan
 X is floor("-35")        type_error(number, "-35")
Inf is inf NegInf is -inf
evaluation_error(int_overflow) - a conversion to the integer type resulted in an overflow because the incoming floating-point or string value was too large. I is integer(3)              I is set to 3 (no change)
 I is integer(3.5)            I is set to 3
 I is integer(2.0 + 6.0)      I is set to 8
 I is integer("-35")          I is set to -35 (string conversion)
 I is integer("foo")          type_error(integer, "foo")
 I is integer('3')            type_error(evaluable, '3')
 I is integer(2147483648.0)   evaluation_error(int_overflow)
type_error(string, Expr) - Expr is not a string. type_error(integer, Length) - Length is not an integer. domain_error(not_less_than_zero, Length) - Start is an integer that is less than zero.X is left("foobar", 3) X is set to "foo" X is left("foobar", 10) X is set to "foobar" X is left("foobar", 0) X is set to "" X is left(1.5, 1) type_error(string, 1.5) X is left("foobar", 1.0) type_error(integer, 1.0) X is left("foobar", -1) domain_error(not_less_than_zero, -1)
type_error(string, Expr) - Expr is not a string. type_error(integer, Length) - Length is not an integer. domain_error(not_less_than_zero, Length) - Start is an integer that is less than zero.X is left_bytes("foobar", 3) X is set to "foo" X is left_bytes("foobar", 10) X is set to "foobar" X is left_bytes("foobar", 0) X is set to "" X is left_bytes(1.5, 1) type_error(string, 1.5) X is left_bytes("foobar", 1.0) type_error(integer, 1.0) X is left_bytes("foobar", -1) domain_error(not_less_than_zero, -1)
type_error(string, Expr) - Expr is not a string.X is length("foobar") X is set to 6 X is length("foo" + "bar") X is set to 6 X is length("") X is set to 0 X is length("\u00AF") X is set to 1 X is length(1.5) type_error(string, 1.5)
type_error(string, Expr) - Expr is not a string.X is length_bytes("foobar") X is set to 6 X is length_bytes("foo" + "bar") X is set to 6 X is length_bytes("") X is set to 0 X is length_bytes("\u00AF") X is set to 2 X is length_bytes(1.5) type_error(string, 1.5)
type_error(number, Expr) - Expr is not a number. X is log(e)              X is set to 1
 X is log(1)              X is set to 0.0
 X is log(e * e)          X is set to 2.0
 X is log(1 / (e * e))    X is set to -2.0
 X is log(0.0)            X is set to -inf
 X is log(inf)            X is set to inf
 X is log(-inf)           X is set to nan
 X is log(nan)            X is set to nan
 X is log("2.0")          type_error(number, "2.0")
type_error(string, Expr) - Expr is not a string. type_error(integer, Start) - Start is not an integer. type_error(integer, Length) - Length is not an integer. domain_error(not_less_than_zero, Start) - Start is an integer that is less than zero. domain_error(not_less_than_zero, Length) - Start is an integer that is less than zero.X is mid("foobar", 1, 4) X is set to "ooba" X is mid("foobar", 1, 0) X is set to "" X is mid("foobar", 10, 3) X is set to "" X is mid("foobar", 4, 3) X is set to "ar" X is mid("foobar", 4) X is set to "ar" X is mid(1.5, 1) type_error(string, 1.5) X is mid("foobar", 1.0, 4) type_error(integer, 1.0) X is mid("foobar", 1, 4.0) type_error(integer, 4.0) X is mid("foobar", -1) domain_error(not_less_than_zero, -1) X is mid("foobar", 1, -4) domain_error(not_less_than_zero, -4)
type_error(string, Expr) - Expr is not a string. type_error(integer, Start) - Start is not an integer. type_error(integer, Length) - Length is not an integer. domain_error(not_less_than_zero, Start) - Start is an integer that is less than zero. domain_error(not_less_than_zero, Length) - Start is an integer that is less than zero.X is mid_bytes("foobar", 1, 4) X is set to "ooba" X is mid_bytes("foobar", 1, 0) X is set to "" X is mid_bytes("foobar", 10, 3) X is set to "" X is mid_bytes("foobar", 4, 3) X is set to "ar" X is mid_bytes("foobar", 4) X is set to "ar" X is mid_bytes(1.5, 1) type_error(string, 1.5) X is mid_bytes("foobar", 1.0, 4) type_error(integer, 1.0) X is mid_bytes("foobar", 1, 4.0) type_error(integer, 4.0) X is mid_bytes("foobar", -1) domain_error(not_less_than_zero, -1) X is mid_bytes("foobar", 1, -4) domain_error(not_less_than_zero, -4)
NaN is nan
PIOver2 is pi / 2
type_error(number, Expr1) - Expr1 is not a number. type_error(number, Expr2) - Expr2 is not a number. X is pow(2, 3)           X is set to 8
 X is pow(3.5, 0)         X is set to 1.0
 X is pow(9, 0.5)         X is set to 3.0
 X is pow(1.0, 43)        X is set to 1.0
 X is pow(1.0, nan)       X is set to 1.0
 X is pow(nan, 0)         X is set to 1.0
 X is pow(0.0, 20)        X is set to 0.0
 X is pow(-1, inf)        X is set to 1.0
 X is pow(-1, -inf)       X is set to 1.0
 X is pow(0.5, -inf)      X is set to inf
 X is pow(1.5, -inf)      X is set to 0.0
 X is pow(1.5, inf)       X is set to inf
 X is pow(-inf, -3)       X is set to 0.0
 X is pow(-inf, 3)        X is set to -inf
 X is pow(-inf, 4)        X is set to inf
 X is pow(inf, -2)        X is set to 0.0
 X is pow(inf, 2)         X is set to inf
 X is pow(0.0, -2)        X is set to inf
 X is pow(nan, nan)       X is set to nan
 X is pow("2.0", 2)       type_error(number, "2.0")
 X is pow(2, "2.0")       type_error(number, "2.0")
 X is random                  generates a float between 0.0 and 1.0
 X is integer(random * 20)    generates an integer between 0 and 19
type_error(string, Expr) - Expr is not a string. type_error(integer, Length) - Length is not an integer. domain_error(not_less_than_zero, Length) - Start is an integer that is less than zero.X is right("foobar", 3) X is set to "bar" X is right("foobar", 10) X is set to "foobar" X is right("foobar", 0) X is set to "" X is right(1.5, 1) type_error(string, 1.5) X is right("foobar", 1.0) type_error(integer, 1.0) X is right("foobar", -1) domain_error(not_less_than_zero, -1)
type_error(string, Expr) - Expr is not a string. type_error(integer, Length) - Length is not an integer. domain_error(not_less_than_zero, Length) - Start is an integer that is less than zero.X is right_bytes("foobar", 3) X is set to "bar" X is right_bytes("foobar", 10) X is set to "foobar" X is right_bytes("foobar", 0) X is set to "" X is right_bytes(1.5, 1) type_error(string, 1.5) X is right_bytes("foobar", 1.0) type_error(integer, 1.0) X is right_bytes("foobar", -1) domain_error(not_less_than_zero, -1)
type_error(number, Expr) - Expr is not a number. X is round(3)            X is set to 3
 X is round(35.125)       X is set to 35.0
 X is round(35.5)         X is set to 36.0
 X is round(35.625)       X is set to 36.0
 X is round(-35.125)      X is set to -35.0
 X is round(-35.5)        X is set to -36.0
 X is round(-35.625)      X is set to -36.0
 X is round(0.0)          X is set to 0.0
 X is round(-inf)         X is set to -inf
 X is round(nan)          X is set to nan
 X is round("-35")        type_error(number, "-35")
type_error(number, Expr) - Expr is not a number. X is sign(3)             X is set to 1
 X is sign(-35.125)       X is set to -1
 X is sign(0.0)           X is set to 0
 X is sign(-0.0)          X is set to 0
 X is sign(-inf)          X is set to -1
 X is sign(nan)           X is set to 0
 X is sign("-35")         type_error(number, "-35")
type_error(number, Expr) - Expr is not a number. X is sin(0)              sets X to 0.0
 X is sin(pi / 2)         sets X to 1.0
 X is sin(inf)            sets X to nan
 X is sin(nan)            sets X to nan
 X is sin("1.0")          type_error(number, "1.0")
type_error(number, Expr) - Expr is not a number. X is sqrt(1)             X is set to 1.0
 X is sqrt(0.0)           X is set to 0.0
 X is sqrt(2.0)           X is set to 1.41421...
 X is sqrt(256)           X is set to 16.0
 X is sqrt(inf)           X is set to inf
 X is sqrt(-2.0)          X is set to nan
 X is sqrt(-inf)          X is set to nan
 X is sqrt(nan)           X is set to nan
 X is sqrt("2.0")         type_error(number, "2.0")
S is string(3) S is set to "3" S is string(3.5) S is set to "3.5" S is string(2.0 + 6.0) S is set to "8.0" S is string("foo") S is set to "foo" (no change) S is string(2.0e35) S is set to "2e+35" S is string('3') type_error(evaluable, '3')
P is the result of evaluating Precision. A trailing "<tt>.0</tt>" will be added if necessary to make the value a valid Plang floating-point constant.S is string(3, 2) S is set to "3" S is string(3.5, 2) S is set to "3.5" S is string(3.125, 2) S is set to "3.1" S is string("foo", 2) S is set to "foo" (no change) S is string('3') type_error(evaluable, '3')
type_error(number, Expr) - Expr is not a number. X is tan(0)              sets X to 0.0
 X is tan(1.0)            sets X to 1.557407...
 X is tan(inf)            sets X to nan
 X is tan(nan)            sets X to nan
 X is tan("1.0")          type_error(number, "1.0")
 1.6.1