#FEATURE by cg
authorClaus Gittinger <cg@exept.de>
Sun, 02 Jul 2017 00:45:41 +0200
changeset 21936 5a4a6a7c47d3
parent 21935 93150e33d131
child 21937 2cea97649a40
#FEATURE by cg class: Float changed: #raisedTo:
Float.st
--- a/Float.st	Sun Jul 02 00:45:22 2017 +0200
+++ b/Float.st	Sun Jul 02 00:45:41 2017 +0200
@@ -1927,44 +1927,38 @@
 raisedTo:aNumber
     "return self raised to the power of aNumber"
 
-    |n|
-
-    n := aNumber asFloat.
 %{
-    double rslt;
+    double _n, rslt;
     OBJ newFloat;
 
-    if (__isFloatLike(n)) {
-        __threadErrno = 0;
-        rslt = pow(__floatVal(self), __floatVal(n));
-        if (! isnan(rslt))  /* Currently all our systems support isnan() */
-        {
-            if (__threadErrno == 0) {
-                __qMKFLOAT(newFloat, rslt);
-                RETURN ( newFloat );
-            }
+    if (__isFloatLike(aNumber)) {
+        _n = __floatVal(aNumber);
+    } else if (__isSmallInteger(aNumber)) {
+        _n = (double)__intVal(aNumber);
+    } else {
+        goto notEasy;
+    }        
+    __threadErrno = 0;
+    rslt = pow(__floatVal(self), _n);
+    if (! isnan(rslt)) { /* Currently all our systems support isnan() */
+        if (__threadErrno == 0) {
+            __qMKFLOAT(newFloat, rslt);
+            RETURN ( newFloat );
         }
     }
+notEasy: ;    
 %}.
     "/ the c-library pow function, has a bug:
     "/ it does not deal correctly with negative numbers.
     "/ I.e. it raises an error on -8^(1/3) instead of returning a negative -2
     "/ work around with a kludge:
     self < 0 ifTrue:[
-        ^ (self negated raisedTo:n) negated
+        ^ (self negated raisedTo:aNumber) negated
     ].
 
-    "
-     an invalid argument (not convertable to float ?)
-    "
-    ^ self class
-        raise:#domainErrorSignal
-        receiver:self
-        selector:#raisedTo:
-        arguments:(Array with:aNumber)
-        errorString:'bad receiver/arg in raisedTo:'
-
-    "Modified: / 22-06-2017 / 15:55:09 / cg"
+    ^ aNumber raisedFromFloat:self
+
+    "Modified: / 01-07-2017 / 21:58:26 / cg"
 !
 
 sqrt