What is "tag"?
For calculating the power of 2 it is more efficient to call the function sqr instead of calling power(..., 2)
The center formula, the part with the 4th root, is lacking brackets around the numerator and denominator expressions:
y:=5*sqr(x+1)+5*((power((x+3)/(x+2),0.25)+2))/(x-3); // <--- brackets around x+3 and (x-2
Use "else" between the "if" conditions to simplify the code. Basically
if (x <= -3) then
y := ....
else if (x <= 0) then // no need to check for x >-3 because the opposite case has been handled already
y := ...
else // no need to check for y > 0 because the case has been handled by the previous two if's.
y := ...
Do not name a variable "exp" because there is an equally named function - this leads to unnecessary confusion. But I guess you want to calculate the exponential of -4x:
And I don't know if your code is called often. When this is true you should pre-calculate the constant power(10, 1.5) in the first expression: 10^1.5 = 10^(3/2) = sqrt(1000)
const
sqrt1000 = sqrt(1000.0);
...
y := abs(...) + sqrt1000);