Strange math handling: var*var != var^2

It’s a question concernig that:

var date=new Date(2007,11,1,12);
trace((date.getHours() * date.getHours()) / 144 - date.getHours() / 6 + .75);
trace((date.getHours() ^ 2) / 144 - date.getHours() / 6 + .75);

Gives:

-0.25
-1.1527777777777777

First is the right one, but why it is so different?