Если микроконтроллер не имеет аппаратной поддержки вычисления чисел с плавающей точкой, то для компиляции доступна только целочисленная арифметика. Она состоит из таких операций как сложение (+
), вычитание (-
), деление на цело (DIV
) и получение остатка от деления на цело (MOD
).
MODULE ExamplesMath; VAR a, b, r: INTEGER; BEGIN a := 37; b := 10; r := a + b; (* r = 47 *) r := a - b; (* r = 27 *) r := a DIV b; (* r = 3 *) r := a MOD b; (* r = 7 *) END ExamplesMath.
Если микроконтроллер имеет модуль FPU, то будут доступны привычные операции над действительными числами REAL
. В выражениях присвоения к переменным типа REAL
константы должны указываться с точкой, обозначающей наличие десятичных разрядов.
MODULE ExamplesMath2; VAR a, b, r: REAL; BEGIN a := 33.3; b := 22.0; r := a + b; (* r = 55.3 *) r := a - b; (* r = 11.299999999999997 *) r := a * b; (* r = 732.5999999999999 *) r := a / b; (* r = 1.5136363636363634 *) END ExamplesMath2.
Также для микроконтроллеров архитектуры ARMv7 с аппаратным модулем FPU доступен модуль MicroARMv7MMath
с самыми необходимыми математическими функциями.
MODULE ExamplesMath3; IMPORT Math := MicroARMv7MMath; VAR a: REAL; BEGIN a := Math.sqrt(3.14); a := Math.exp(3.14); a := Math.ln(3.14); a := Math.sin(3.14/4.0); a := Math.cos(3.14/4.0); END ExamplesMath2.
БИТОВЫЕ СДВИГИ ЕСТЬ??? разница между x=y/2 и x=y»1; ??