Overview
- Object ID : 2812 (2021-12-19)
- Author : Eric R. Smith | added by Archiver
- Content : Code
- Microcontroller : Propeller 2
- Language : SPIN2
- Category : Math
- Licence : Other
Content
These are functions for performing floating point math in Spin2. To use, include a BinFloat object in your code, e.g.:
OBJ
## flt : "BinFloat"
' silly example that calculates (x +. y) /. 2.0
PUB calcAverage(x, y) : r
r := flt.F_Div( flt.F_Add(x, y) , 2.0 )
The routines available are:
Basic Math:
F_Neg(x): return negative of floating point number x (or use -. operator)
F_Abs(x): return absolute value of floating point number x
F_Add(x, y): return x + y (floating point) (or use +. operator)
F_Sub(x, y): return x - y (or use -. operator)
F_Mul(x, y): return x * y (or use *. operator)
F_Div(x, y): return x / y (or use /. operator)
F_Sqrt(x): return floating point square root of float x
Trignometry:
These functions all can operate in degrees, radians, or with angles specified as fractions of a complete circle. Before calling any of the trig functions, set the angle format with one of the following calls:
SetDegrees(): specifies that angles are in degrees
SetRadians(): specifies that angles are in radians
SetFraction(): specifies that angles are in fractions of a circle
F_Sin(angle): returns sine of angle
F_Cos(angle): returns cosine of angle
F_Tan(angle): returns tangent of angle
F_Asin(x): returns inverse sine (angle such that FSin(angle) is x)
F_ACos(x): returns inverse cosine
F_ATan(x): returns inverse tangent
F_ATan2(x, y): returns angle that the vector (x,y) makes with the x axis. Note: the order of parameters is different from the similar C function!
Exponentials and logs:
F_Log2(x) : calculates log base 2 of x
F_Log10(x) : calculates log base 10 of x
F_Log(x) : calculates log base e (natural logarithm) of x
F_Exp2(x) : calculates 2^x
F_Exp10(x) : calculates 10^x
F_Exp(x) : calculates e^x
F_Pow(x, y) : calculates x^y, where both x and y are floats
F_PowInt(x, n): calculates x^n, where x is a float and n is a signed integer
Conversions to/from integer:
FromInt(n): returns floating point number closest to the signed integer n
FromUInt(n): returns floating point number closest to the unsigned integer n
F_Trunc(x): returns signed integer truncated to float x. If x is too large/small, returns $7fff_ffff or $8000_0000
F_Round(x): returns signed integer closest to float x, with rounding. If x is too large/small, returns $7fff_ffff or $8000_0000
Conversion from string:
FromString(ptr): reads a float from a string. The string may represent the float in ordinary or in scientific notation, in which case the exponent is specified by E (so e.g. "100" may be written "1E02").
Display using SEND:
SendFloatSci(x): uses SEND to output float x in scientific notation like 1.000000E+02
SendFloatPlain(x): uses SEND to output float x in ordinary notation
SendFloat(x): uses SEND to output float x; selects between scientific and ordinary notation based on the size of the float