Math module
The Math module groups together the standard numeric functions — sign and magnitude, trigonometry, exponentials and logarithms, the square root, rounding to a chosen number of decimal places, and pseudo-random number generation. Most members return a Double, so intermediate results stay in floating point until they are written back to a narrower variable.
Sign and magnitude
Abs returns the absolute value of its argument — its distance from zero, with the sign discarded — and preserves the argument’s data type, so Abs(-3#) is a Double and Abs(-3) an Integer. Sgn is the complement: it discards the magnitude and returns just the sign, as -1, 0, or +1. Together they decompose a number into its sign and magnitude.
Debug.Print Abs(-7.5) ' 7.5
Debug.Print Sgn(-7.5) ' -1
Trigonometry
Sin, Cos, and Tan take an angle in radians and return its sine, cosine, and tangent. Atn goes the other way — given a tangent, it returns the angle whose tangent that is, in the range -pi/2 to pi/2. All four work exclusively in radians; multiply degrees by pi / 180 to convert to radians, or radians by 180 / pi to convert back.
Const Pi As Double = 3.14159265358979
Debug.Print Sin(Pi / 2) ' 1
Debug.Print Atn(1) * 4 ' 3.14159265358979 — pi
The other inverse trigonometric functions (arcsine, arccosine) and the hyperbolic functions are not provided directly, but each can be derived from Atn, Log, Exp, and Sqr in a couple of lines — see the worked examples on Atn, Log, and Cos.
Exponentials and logarithms
Exp raises e (≈ 2.71828) to a chosen power, and Log is its inverse, returning the natural (base-e) logarithm. To compute a logarithm in another base, divide by Log of that base: Log(x) / Log(10) for base 10, Log(x) / Log(2) for base 2, and so on.
Debug.Print Exp(1) ' 2.71828182845905 — e
Debug.Print Log(100) / Log(10) ' 2 — base-10 log of 100
Square root
Sqr returns the square root of a non-negative number as a Double. Passing a negative value raises a run-time error rather than returning a complex or NaN result; if a calculation may legitimately produce a negative input, guard the call with Sgn or a comparison to zero.
Rounding
Round rounds a number to a chosen number of decimal places using banker’s rounding — when the value lies exactly half-way between two possible results, it rounds toward the nearest even digit, so Round(0.5, 0) is 0 and Round(1.5, 0) is 2. This avoids the systematic upward bias of always-round-half-up and matches VBA’s behaviour. For truncation rather than rounding, see Int and Fix in the Conversion module; for narrowing-with-rounding to a specific integer type, see CInt and CLng.
Random numbers
Randomize seeds the pseudo-random number generator, and Rnd draws from it, returning a Single in the half-open range [0, 1). Without an explicit call to Randomize, Rnd produces the same sequence every time the program runs — convenient for reproducible tests; for unpredictable output, call Randomize once at startup with no argument so the system timer is used as the seed.
The standard idiom for a uniformly distributed integer between lower and upper (inclusive) combines Rnd with Int:
Randomize
Dim Roll As Long
Roll = Int((6 - 1 + 1) * Rnd + 1) ' a die roll, 1..6
Members
- Abs – returns the absolute value of a number
- Atn – returns the arctangent of a number, in radians
- Cos – returns the cosine of an angle
- Exp – returns e raised to a power
- Log – returns the natural (base-e) logarithm of a number
- Randomize – initialises the random-number generator
- Rnd – returns a pseudo-random number in the range
[0, 1) - Round – rounds a number to a chosen number of decimal places, using banker’s rounding
- Sgn – returns the sign of a number
- Sin – returns the sine of an angle
- Sqr – returns the square root of a number
- Tan – returns the tangent of an angle