I find this a little frustrating as I learn Maple, so I think there is a better way to handle this.

I find myself having to keep wrapping expressions with evalf() in order to compare them, since when I use a constant such as Pi in these expressions and then compare them, Maple complains.

In a large program, one does not know if an expression contains Pi or not beforehand, so is one really supposed to convert every expression to float just in case they might need to compare 2 expressions?

Let me explain with simple example:

x:=1.2; #it does not matter if this was 12/10 or 1.2, same error will result.

y:=Pi/3;

if x<y then

print("x<y");

else

print("x>=y");

fi;

The above gives the error "Error, cannot determine if this expression is true or false: 1.2<(1/3)*Pi"

So I changed the y assignment above to y:=evalf(Pi/3); or evalf(Pi)/3; and now Maple is happy.

But this for me looks awkward. In Mathematica, I can simply write the same, using symbolic Pi, and it works as is:

x = 1.2; #even if this is symbolic 12/10 it will also work

y = Pi/3;

If[x < y, Print["x<y"], Print["x>=y"]]

I did not have to write y=N[Pi/3] where N[] is the equivalent function to Maple's evalf() which converts its argument to real.

So, now in Maple, I find myself writing evalf() around so many things, since I have to anticipate I might need to compare them in some logic later on and I can't keep track which one has some symbolic constant such as Pi in them or not. While in Mathematica I never had to worry about this.

Is there a way to reduce the need to having to use evalf() so much?

It seems to me, Maple should be able to decide if 1<Pi without me having to write 1<evalf(Pi) ?