I've added Gcd and factorial to core.ops, as attachement. 
Dan is this something you want?
I also have "least common multiple"  and "binomial" implementation
waiting. If you want them i can can make a patch 


/Josef



--- core.ops.orig       Tue Jun 11 10:03:19 2002
+++ core.ops    Tue Jun 11 10:08:32 2002
@@ -2433,8 +2433,92 @@
 
 =cut
 
+########################################
 
-###############################################################################
+=head2 Other mathematical operations
+
+Implementations of various mathematical operations
+
+=over 4
+
+=cut
+
+
+########################################
+
+=item B<gcd>(out INT, in INT, in INT)
+
+=item B<gcd>(out INT, in NUM, in NUM)
+
+Greatest Common divisor of $2 and $3.
+
+=cut
+
+inline op gcd(out INT, in INT, in INT) {
+
+UINTVAL q = 0;
+UINTVAL c = 0;
+  while ($3 != 0) {
+    q = floor( (FLOATVAL)$2/$3 );
+    c = $2 - $3*q;
+    $2 = $3;
+    $3 = c;
+  }
+  $1 = $2;
+  goto NEXT();
+}
+
+inline op gcd(out INT, in NUM, in NUM) {
+
+UINTVAL q = 0;
+UINTVAL c = 0;
+  while ($3 != 0) {
+    q = floor( (FLOATVAL)$2/$3 );
+    c = $2 - $3*q;
+    $2 = $3;
+    $3 = c;
+  }
+  $1 = $2;
+  goto NEXT();
+}
+
+
+########################################
+
+=item B<fact>(out INT, in INT)
+
+=item B<fact>(out NUM, in INT)
+
+Factorial, n!. Calculates the product of 1 to N.
+
+=cut
+
+inline op fact(out INT, in INT) {
+
+UINTVAL i = $2;
+UINTVAL q = 1;
+  while(i>0) {
+    q = q*i;
+    i--;
+  }
+  $1 = q;
+  goto NEXT();
+}
+
+inline op fact(out NUM, in INT) {
+
+UINTVAL i = $2;
+UINTVAL q = 1;
+  while(i>0) {
+    q = q*i;
+    i--;
+  }
+  $1 = q;
+  goto NEXT();
+}
+
+
+########################################
 
 =head2 Bitwise logical operations
 

Reply via email to