Jump to content

Mathematical Functions: Difference between revisions

From Flowcode Help
No edit summary
Tags: Flowcode v9 Flowcode v8 Version
 
(3 intermediate revisions by one other user not shown)
Line 1: Line 1:
==Old Versions==
This page is current for Flowcode v11 and later. Earlier versions can be found below:
{| class="wikitable"
|+
|-
| [[Special:PermanentLink/41807|Flowcode v10]]
|-
| [[Special:PermanentLink/39332|Flowcode v9]]
|-
| [[Special:PermanentLink/39332|Flowcode v8]]
|}
<br>
===Introduction===
:''See [[Calculation Icon Properties]]''
:''See [[Calculation Icon Properties]]''


The following mathematical functions can be used in calculations. All of these functions are now usable on each chip type.
As well as the basic mathematical operators (+, -, *, /), the following mathematical functions can be used in calculations. All of these functions are now usable on each chip type.




'''Functions'''
===Functions===


Flowcode includes an additional set of mathematical functions:
Flowcode includes an additional set of mathematical functions:


{| class="wikitable" style="margin:auto; width:700px;"
{| class="wikitable" style="margin:auto; width:900px;"
|-
|-
! scope="col" width="30%" | Function Prototype
! scope="col" width="25%" | Function Prototype
! scope="col" width="70%" | Description
! scope="col" width="45%" | Description
! scope="col" width="30%" | Example
|-
! colspan="3" style="background-color: #f0f0f0;" | Floating Point Arithmetic
|-
|-
| align="center" | float = fadd(float, float)
| align="center" | float = fadd(float, float)
| Add two floating point numbers together
| Add two floating point numbers together
| fadd(3.14, 2.86) = 6.0
|-
|-
| align="center" | float = fsub(float, float)
| align="center" | float = fsub(float, float)
| Subtract two floating point numbers
| Subtract two floating point numbers
| fsub(10.5, 3.2) = 7.3
|-
|-
| align="center" | float = fmul(float, float)
| align="center" | float = fmul(float, float)
| Multiply two floating point numbers
| Multiply two floating point numbers
| fmul(4.5, 2.0) = 9.0
|-
|-
| align="center" | float = fdiv(float, float)
| align="center" | float = fdiv(float, float)
| Divide two floating point numbers
| Divide two floating point numbers
| fdiv(15.0, 3.0) = 5.0
|-
|-
| align="center" | float = fmod(float, float)
| align="center" | float = fmod(float, float)
| MOD function for floating point numbers
| MOD function for floating point numbers
| fmod(7.5, 2.0) = 1.5
|-
|-
| align="center" | byte = isinf(float)
| align="center" | byte = isinf(float)
| Checks to see if the floating point number is infinite
| Checks to see if the floating point number is infinite
| isinf(1.0/0.0) = 1
|-
|-
| align="center" | byte = isnan(float)
| align="center" | byte = isnan(float)
| Checks to see if the floating point is not a number
| Checks to see if the floating point is not a number
| isnan(0.0/0.0) = 1
|-
|-
| align="center" | byte = float_eq(float, float)
| align="center" | byte = float_eq(float, float)
| Compares two floating point numbers to see if they are equal
| Compares two floating point numbers to see if they are equal
| float_eq(3.14, 3.14) = 1
|-
|-
| align="center" | byte = float_ge(float, float)
| align="center" | byte = float_ge(float, float)
| Compares two floating point numbers to see if they are greater then or equal&nbsp;&nbsp;&nbsp;
| Compares two floating point numbers to see if they are greater then or equal&nbsp;&nbsp;&nbsp;
| float_ge(5.0, 3.0) = 1
|-
|-
| align="center" | byte = float_gt(float, float)
| align="center" | byte = float_gt(float, float)
| Compares two floating point numbers to see if they are greater then
| Compares two floating point numbers to see if they are greater then
| float_gt(5.0, 3.0) = 1
|-
|-
| align="center" | byte = float_le(float, float)
| align="center" | byte = float_le(float, float)
| Compares two floating point numbers to see if they are less then or equal
| Compares two floating point numbers to see if they are less then or equal
| float_le(3.0, 5.0) = 1
|-
|-
| align="center" | byte = float_lt(float, float)
| align="center" | byte = float_lt(float, float)
| Compares two floating point numbers to see if they are less then
| Compares two floating point numbers to see if they are less then
| float_lt(3.0, 5.0) = 1
|-
|-
| align="center" | int = random()
| align="center" | int = random()
| Generates a random number 0x0000 <=> 0xFFFF
| Generates a random number (0-65535)
| (random() MOD 10) + 1 = 7 (range 1-10)
|-
! colspan="3" style="background-color: #f0f0f0;" | Mathematical Functions
|-
|-
| align="center" | fabs( x ), floor( x ), ceil( x )
| align="center" | fabs( x ), floor( x ), ceil( x )
| Absolute value, floor and ceiling functions
| Absolute value, floor and ceiling functions
| fabs(-5.7) = 5.7<br>floor(4.9) = 4<br>ceil(4.1) = 5
|-
|-
| align="center" | fmod( x , y )
| align="center" | fmod( x , y )
| Floating point modulus (remainder of x divided by y)
| Floating point modulus (remainder of x divided by y)
| fmod(25.5, 7.0) = 4.5
|-
|-
| align="center" | sqrt( x ), cbrt( x )
| align="center" | sqrt( x ), cbrt( x )
| Square and cube roots
| Square and cube roots
| sqrt(25) = 5.0<br>cbrt(27) = 3.0
|-
|-
| align="center" | log( x ), log10( x )
| align="center" | log( x ), log10( x )
| Logarithms (base e and base 10)
| Logarithms (base e and base 10)
| log(2.718) ~ 1.0<br>log10(100) = 2.0
|-
|-
| align="center" | exp( x ), pow( x , y )
| align="center" | exp( x ), pow( x , y )
| Exponential and power functions (x to the power of y)
| Exponential and power functions (x to the power of y)
| exp(1) ~ 2.718<br>pow(2, 8) = 256
|-
|-
| align="center" | sin( x ), cos( x ), tan( x )
| align="center" | sin( x ), cos( x ), tan( x )
| Trigonometric functions where x is in radians
| Trigonometric functions where x is in radians
| sin(1.57) ~ 1.0<br>cos(0) = 1.0<br>tan(0.785) ~ 1.0
|-
|-
| align="center" | asin( x ), acos( x ), atan( x )
| align="center" | asin( x ), acos( x ), atan( x )
| Inverse trigonometric functions where x is in radians           
| Inverse trigonometric functions where x is in radians           
| asin(0.5) ~ 0.524<br>acos(0.707) ~ 0.785<br>atan(1) ~ 0.785
|-
|-
| align="center" | atan2( y , x )
| align="center" | atan2( y , x )
| Four-quadrant inverse tangent
| Four-quadrant inverse tangent
| atan2(1, 1) = 0.785
|-
|-
| align="center" | sinh( x ), cosh( x ), tanh( x )
| align="center" | sinh( x ), cosh( x ), tanh( x )
| Hyperbolic functions
| Hyperbolic functions
| sinh(1) ~ 1.175<br>cosh(0) = 1.0<br>tanh(1) ~ 0.762
|-
|-
| align="center" | isnan( x ), isinf( x )
| align="center" | isnan( x ), isinf( x )
| Tests for not-a-number and infinity
| Tests for not-a-number and infinity
| isnan(5.0) = 0<br>isinf(5.0) = 0
|-
|-
| align="center" | round( x )
| align="center" | round( x )
| Decimal rounding (x rounded to the nearest integer)
| Decimal rounding (x rounded to the nearest integer)
| round(3.7) = 4
|-
|-
| align="center" | fround( x , y )
| align="center" | fround( x , y )
| Floating point rounding (x rounded to y decimal places)
| Floating point rounding (x rounded to y decimal places)
| fround(3.14159, 2) = 3.14
|-
|-
| align="center" | asinh( x ), acosh( x ), atanh( x )
| align="center" | asinh( x ), acosh( x ), atanh( x )
| Inverse hyperbolic functions
| Inverse hyperbolic functions
| asinh(1) ~ 0.881<br>acosh(1) = 0<br>atanh(0.5) ~ 0.549
|-
|-
| align="center" | fact( x )
| align="center" | fact( x )
| Factorial
| Factorial (multiply all numbers down to 1)
| fact(5) = 120 (5×4×3×2×1)
|-
! colspan="3" style="background-color: #f0f0f0;" | Integer Operations
|-
| align="center" | MOD
| Returns the remainder after division
| 17 MOD 5 = 2 (17÷5 = 3 remainder 2)
|-
! colspan="3" style="background-color: #f0f0f0;" | Bitwise Operations
|-
| align="center" | AND <also &>
| Bitwise AND operation
| 0b1100 AND 0b1010 = 0b1000
|-
| align="center" | OR <also |>
| Bitwise OR operation
| 0b1100 OR 0b1010 = 0b1110
|-
| align="center" | XOR
| Bitwise XOR (exclusive OR) operation
| 0b1100 XOR 0b1010 = 0b0110
|-
| align="center" | NOT <also ~>
| Bitwise NOT operation
| NOT 0b1100 = 0b0011
|-
| align="center" | <<
| Left shift operation (multiply by 2^n)
| 5 << 2 = 20 (5 × 4)
|-
| align="center" | >>
| Right shift operation (divide by 2^n)
| 20 >> 2 = 5 (20 ÷ 4)
|-
! colspan="3" style="background-color: #f0f0f0;" | Logical Operations (usually used in decision branches)
|-
| align="center" | ==<br>(also =)
| Equal to operation
| Value1 = 26, Value2 = 26<br>If Value1 == Value2 then True<br>If Value1 = Value2 then True
|-
| align="center" | !=<br>(also <>)
| Not equal to operation
| Value1 = 10, Value2 = 20<br>If Value1 != Value2 then True<br>If Value1 <> Value2 then True
|-
| align="center" | &&
| Logical AND operation
| Value = 10<br>If (Value > 2) && (Value < 15) then True
|-
| align="center" | &#124;&#124;
| Logical OR operation
| Value = 20<br>If (Value < 5) &#124;&#124; (Value > 15) then True
|-
| align="center" | !
| Logical NOT operation
| Flag = 1<br>If ! Flag then False (inverts the value)
|-
! colspan="3" style="background-color: #f0f0f0;" | Array Functions
|-
| align="center" | arraydims( array )
| Get the number of dimensions in an array
| arraydims(data[5][3]) = 2
|-
| align="center" | arraysize( array )
| Get the total size of an array
| arraysize(data[5][3]) = 15
|-
! colspan="3" style="background-color: #f0f0f0;" | Hardware Functions
|-
|-
| align="center" | SetPinNoDDR( PortPin, Output )
| align="center" | SetPinNoDDR( PortPin, Output )
| Set output pin quickly without changing data direction state.
| Set output pin quickly without changing data direction state.
| SetPinNoDDR(PORTA.0, 1) = pin high
|-
|-
| align="center" | Input = GetPinNoDDR( PortPin )
| align="center" | Input = GetPinNoDDR( PortPin )
| Read input pin quickly without changing data direction state.
| Read input pin quickly without changing data direction state.
| GetPinNoDDR(PORTB.1) = 0 or 1
|-
! colspan="3" style="background-color: #f0f0f0;" | Type Conversion
|-
| align="center" | float2int( x )
| Convert floating point number to integer
| float2int(5.7) = 5 (truncates)
|-
| align="center" | int2float( x )
| Convert integer to floating point number
| int2float(42) = 42.0
|-
! colspan="3" style="background-color: #f0f0f0;" | Type Casting Operators (For more information see [[Typecasting]])
|-
| align="center" | STRING
| Convert numeric value to string type
| STRING 123 = "123"
|-
| align="center" | FLOAT
| Convert value to floating point type
| FLOAT 5 = 5.0
|-
| align="center" | SIGNED
| Convert value to signed integer type
| SIGNED -5 = -5 (as signed)
|-
| align="center" | UNSIGNED
| Convert value to unsigned integer type
| UNSIGNED -5 = 65531 (as unsigned)
|}
|}

Latest revision as of 11:05, 3 November 2025

Old Versions

This page is current for Flowcode v11 and later. Earlier versions can be found below:

Flowcode v10
Flowcode v9
Flowcode v8


Introduction

See Calculation Icon Properties

As well as the basic mathematical operators (+, -, *, /), the following mathematical functions can be used in calculations. All of these functions are now usable on each chip type.


Functions

Flowcode includes an additional set of mathematical functions:

Function Prototype Description Example
Floating Point Arithmetic
float = fadd(float, float) Add two floating point numbers together fadd(3.14, 2.86) = 6.0
float = fsub(float, float) Subtract two floating point numbers fsub(10.5, 3.2) = 7.3
float = fmul(float, float) Multiply two floating point numbers fmul(4.5, 2.0) = 9.0
float = fdiv(float, float) Divide two floating point numbers fdiv(15.0, 3.0) = 5.0
float = fmod(float, float) MOD function for floating point numbers fmod(7.5, 2.0) = 1.5
byte = isinf(float) Checks to see if the floating point number is infinite isinf(1.0/0.0) = 1
byte = isnan(float) Checks to see if the floating point is not a number isnan(0.0/0.0) = 1
byte = float_eq(float, float) Compares two floating point numbers to see if they are equal float_eq(3.14, 3.14) = 1
byte = float_ge(float, float) Compares two floating point numbers to see if they are greater then or equal    float_ge(5.0, 3.0) = 1
byte = float_gt(float, float) Compares two floating point numbers to see if they are greater then float_gt(5.0, 3.0) = 1
byte = float_le(float, float) Compares two floating point numbers to see if they are less then or equal float_le(3.0, 5.0) = 1
byte = float_lt(float, float) Compares two floating point numbers to see if they are less then float_lt(3.0, 5.0) = 1
int = random() Generates a random number (0-65535) (random() MOD 10) + 1 = 7 (range 1-10)
Mathematical Functions
fabs( x ), floor( x ), ceil( x ) Absolute value, floor and ceiling functions fabs(-5.7) = 5.7
floor(4.9) = 4
ceil(4.1) = 5
fmod( x , y ) Floating point modulus (remainder of x divided by y) fmod(25.5, 7.0) = 4.5
sqrt( x ), cbrt( x ) Square and cube roots sqrt(25) = 5.0
cbrt(27) = 3.0
log( x ), log10( x ) Logarithms (base e and base 10) log(2.718) ~ 1.0
log10(100) = 2.0
exp( x ), pow( x , y ) Exponential and power functions (x to the power of y) exp(1) ~ 2.718
pow(2, 8) = 256
sin( x ), cos( x ), tan( x ) Trigonometric functions where x is in radians sin(1.57) ~ 1.0
cos(0) = 1.0
tan(0.785) ~ 1.0
asin( x ), acos( x ), atan( x ) Inverse trigonometric functions where x is in radians asin(0.5) ~ 0.524
acos(0.707) ~ 0.785
atan(1) ~ 0.785
atan2( y , x ) Four-quadrant inverse tangent atan2(1, 1) = 0.785
sinh( x ), cosh( x ), tanh( x ) Hyperbolic functions sinh(1) ~ 1.175
cosh(0) = 1.0
tanh(1) ~ 0.762
isnan( x ), isinf( x ) Tests for not-a-number and infinity isnan(5.0) = 0
isinf(5.0) = 0
round( x ) Decimal rounding (x rounded to the nearest integer) round(3.7) = 4
fround( x , y ) Floating point rounding (x rounded to y decimal places) fround(3.14159, 2) = 3.14
asinh( x ), acosh( x ), atanh( x ) Inverse hyperbolic functions asinh(1) ~ 0.881
acosh(1) = 0
atanh(0.5) ~ 0.549
fact( x ) Factorial (multiply all numbers down to 1) fact(5) = 120 (5×4×3×2×1)
Integer Operations
MOD Returns the remainder after division 17 MOD 5 = 2 (17÷5 = 3 remainder 2)
Bitwise Operations
AND <also &> Bitwise AND operation 0b1100 AND 0b1010 = 0b1000
OR <also |> Bitwise OR operation 0b1100 OR 0b1010 = 0b1110
XOR Bitwise XOR (exclusive OR) operation 0b1100 XOR 0b1010 = 0b0110
NOT <also ~> Bitwise NOT operation NOT 0b1100 = 0b0011
<< Left shift operation (multiply by 2^n) 5 << 2 = 20 (5 × 4)
>> Right shift operation (divide by 2^n) 20 >> 2 = 5 (20 ÷ 4)
Logical Operations (usually used in decision branches)
==
(also =)
Equal to operation Value1 = 26, Value2 = 26
If Value1 == Value2 then True
If Value1 = Value2 then True
!=
(also <>)
Not equal to operation Value1 = 10, Value2 = 20
If Value1 != Value2 then True
If Value1 <> Value2 then True
&& Logical AND operation Value = 10
If (Value > 2) && (Value < 15) then True
|| Logical OR operation Value = 20
If (Value < 5) || (Value > 15) then True
! Logical NOT operation Flag = 1
If ! Flag then False (inverts the value)
Array Functions
arraydims( array ) Get the number of dimensions in an array arraydims(data[5][3]) = 2
arraysize( array ) Get the total size of an array arraysize(data[5][3]) = 15
Hardware Functions
SetPinNoDDR( PortPin, Output ) Set output pin quickly without changing data direction state. SetPinNoDDR(PORTA.0, 1) = pin high
Input = GetPinNoDDR( PortPin ) Read input pin quickly without changing data direction state. GetPinNoDDR(PORTB.1) = 0 or 1
Type Conversion
float2int( x ) Convert floating point number to integer float2int(5.7) = 5 (truncates)
int2float( x ) Convert integer to floating point number int2float(42) = 42.0
Type Casting Operators (For more information see Typecasting)
STRING Convert numeric value to string type STRING 123 = "123"
FLOAT Convert value to floating point type FLOAT 5 = 5.0
SIGNED Convert value to signed integer type SIGNED -5 = -5 (as signed)
UNSIGNED Convert value to unsigned integer type UNSIGNED -5 = 65531 (as unsigned)