some small fixes and additions
authorceriel <none@none>
Wed, 22 Jul 1987 12:42:10 +0000 (12:42 +0000)
committerceriel <none@none>
Wed, 22 Jul 1987 12:42:10 +0000 (12:42 +0000)
lang/m2/libm2/MathLib0.mod
lang/m2/libm2/Mathlib.mod

index d48833c..8c43275 100644 (file)
@@ -34,12 +34,18 @@ END exp;
 
 PROCEDURE entier(x: REAL): INTEGER;
 BEGIN
-       RETURN TRUNC(x);        (* ??? *)
+       IF x < 0.0 THEN
+               RETURN - TRUNC(-x);
+       END;
+       RETURN TRUNC(x);
 END entier;
 
 PROCEDURE real(x: INTEGER): REAL;
 BEGIN
-       RETURN FLOAT(x);        (* ??? *)
+       IF x < 0 THEN
+               RETURN - FLOAT(-x);
+       END;
+       RETURN FLOAT(x);
 END real;
 
 BEGIN
index 49261bb..274550d 100644 (file)
@@ -1,6 +1,7 @@
 IMPLEMENTATION MODULE Mathlib;
 
   FROM EM IMPORT FIF, FEF;
+  FROM Traps IMPORT Message;
 
        (* From:        Handbook of Mathematical Functions
                        Edited by M. Abramowitz and I.A. Stegun
@@ -49,8 +50,8 @@ IMPLEMENTATION MODULE Mathlib;
   BEGIN
        IF x <= 0.0D THEN
                IF x < 0.0D THEN
-                       (* ??? *)
-                       ;
+                       Message("sqrt: negative argument");
+                       HALT
                END;
                RETURN 0.0D;
        END;
@@ -152,8 +153,8 @@ IMPLEMENTATION MODULE Mathlib;
 
   BEGIN
        IF x <= 0.0D THEN
-               (* ??? *)
-               RETURN 0.0D;
+               Message("ln: argument <= 0");
+               HALT
        END;
        x := FEF(x, exp);
        WHILE x < 1.0D DO
@@ -254,8 +255,8 @@ IMPLEMENTATION MODULE Mathlib;
   BEGIN
        cosinus := longcos(x);
        IF cosinus = 0.0D THEN
-               (* ??? *)
-               RETURN 0.0D;
+               Message("tan: result does not exist");
+               HALT
        END;
        RETURN longsin(x)/cosinus;
   END longtan;
@@ -278,8 +279,8 @@ IMPLEMENTATION MODULE Mathlib;
   BEGIN
        IF x < 0.0D THEN x := -x; END;
        IF x > 1.0D THEN
-               (* ??? *)
-               RETURN 0.0D;
+               Message("arcsin: argument > 1");
+               HALT
        END;
        RETURN LONG(halfpi) -
                longsqrt(1.0D - x)*(a0+x*(a1+x*(a2+x*(a3+x*(a4+x*(a5+x*(a6+x*a7)))))));
@@ -398,8 +399,8 @@ IMPLEMENTATION MODULE Mathlib;
   PROCEDURE longarccosh(x: LONGREAL): LONGREAL;
   BEGIN
        IF x < 1.0D THEN
-               (* ??? *)
-               RETURN 0.0D;
+               Message("arccosh: argument < 1");
+               HALT
        END;
        RETURN longln(x + longsqrt(x*x - 1.0D));
   END longarccosh;
@@ -412,8 +413,8 @@ IMPLEMENTATION MODULE Mathlib;
   PROCEDURE longarctanh(x: LONGREAL): LONGREAL;
   BEGIN
        IF (x <= -1.0D) OR (x >= 1.0D) THEN
-               (* ??? *)
-               RETURN 0.0D;
+               Message("arctanh: ABS(argument) >= 1");
+               HALT
        END;
        RETURN longln((1.0D + x)/(1.0D - x)) / 2.0D;
   END longarctanh;