Number.st
changeset 19769 57962c690836
parent 19768 55e36a939e1e
child 19770 024784e1852b
--- a/Number.st	Mon May 09 16:44:54 2016 +0200
+++ b/Number.st	Mon May 09 16:52:17 2016 +0200
@@ -2468,70 +2468,96 @@
 arcCos
     "return the arccosine of the receiver (in radians)"
 
+    "/ if I am not a Float (or a less general lpReal),
+    "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
         ^ self asFloat arcCos.
     ].
+    "/ slow fallback
     ^ (self class pi / 2) - self arcSin
 !
 
 arcCosech
     "return the inverse hyperbolic cosecant of the receiver."
-
+    "caveat: misnomer; should be called aCosech or arCosech"
+
+    "/ if I am not a Float (or a less general lpReal),
+    "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
         ^ self asFloat arcCosech.
     ].
+    "/ slow fallback
     ^ ((1 + ((self*self)+1) sqrt) / self) ln
 !
 
 arcCosh
     "return the inverse hyperbolic cosine of the receiver."
-
+    "caveat: misnomer; should be called aCosh or arCosh"
+
+    "/ if I am not a Float (or a less general lpReal),
+    "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
         ^ self asFloat arcCosh.
     ].
+    "/ slow fallback
     ^ (self + (self*self-1) sqrt) ln.
 !
 
 arcCoth
     "return the inverse hyperbolic cotangent of the receiver."
-
+    "caveat: misnomer; should be called aCoth or arCoth"
+
+    "/ if I am not a Float (or a less general lpReal),
+    "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
         ^ self asFloat arcCoth.
     ].
+    "/ slow fallback
     ^ ((self+1) / (self-1)) ln / 2
 !
 
 arcSech
     "return the inverse hyperbolic secant of the receiver."
-
+    "caveat: misnomer; should be called aSech or arSech"
+
+    "/ if I am not a Float (or a less general lpReal),
+    "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
         ^ self asFloat arcSech.
     ].
+    "/ slow fallback
     ^ ((1 + (1-(self*self)) sqrt) / self) ln
 !
 
 arcSin
     "return the arcsine of the receiver (in radians)"
 
+    "/ if I am not a Float (or a less general lpReal),
+    "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
         ^ self asFloat arcSin.
     ].
+    "/ very slow fallback
     ^ self arcSin_withAccuracy:self epsilon
 !
 
 arcSinh
     "return the inverse hyperbolic sine of the receiver."
-
+    "caveat: misnomer; should be called aSinh or arSinh"
+
+    "/ if I am not a Float (or a less general lpReal),
+    "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
         ^ self asFloat arcSinh.
     ].
+    "/ slow fallback
     ^ ( self + (self*self+1) sqrt ) ln
 "/    ^ self arcSinh_withAccuracy:self epsilon
 !
@@ -2539,30 +2565,40 @@
 arcTan
     "return the arctangent of the receiver (as radians)"
 
+    "/ if I am not a Float (or a less general lpReal),
+    "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
         ^ self asFloat arcTan.
     ].
+    "/ very slow fallback
     ^ self arcTan_withAccuracy:self epsilon
 !
 
 arcTan2:x
     "return atan2(self,x) (as radians)"
 
+    "/ if I am not a Float (or a less general lpReal),
+    "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
         ^ self asFloat arcTan2:x.
     ].
+    "/ very slow fallback
     ^ self arcTan2_withAccuracy:self epsilon x:x
 !
 
 arcTanh
     "return the inverse hyperbolic tangent of the receiver."
-
+    "caveat: misnomer; should be called aTanh or arTanh"
+    
+    "/ if I am not a Float (or a less general lpReal),
+    "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
         ^ self asFloat arcTanh.
     ].
+    "/ slow fallback
     ^ ((1 + self) / (1 - self)) ln / 2
     "/ s^ ((1 + self) ln / 2) - ((1 - self) ln / 2)
 !
@@ -2570,20 +2606,26 @@
 cos
     "return the cosine of the receiver (interpreted as radians)"
 
+    "/ if I am not a Float (or a less general lpReal),
+    "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
         ^ self asFloat cos.
     ].
+    "/ very slow fallback
     ^ self cos_withAccuracy:self epsilon
 !
 
 cosh
     "return the hyperbolic cosine of the receiver"
 
+    "/ if I am not a Float (or a less general lpReal),
+    "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
         ^ self asFloat cosh.
     ].
+    "/ very slow fallback
     ^ self cosh_withAccuracy:self epsilon
 !
 
@@ -2596,6 +2638,8 @@
 sin
     "return the sine of the receiver (interpreted as radians)"
 
+    "/ if I am not a Float (or a less general lpReal),
+    "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
         ^ self asFloat sin.
@@ -2606,6 +2650,8 @@
 sinh
     "return the hyperbolic sine of the receiver"
 
+    "/ if I am not a Float (or a less general lpReal),
+    "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
         ^ self asFloat sinh.
@@ -2616,16 +2662,20 @@
 tan
     "return the tangens of the receiver (interpreted as radians)"
 
+    "/ slow fallback
     ^ self sin / self cos
 !
 
 tanh
     "return the hyperbolic tangens of the receiver"
 
+    "/ if I am not a Float (or a less general lpReal),
+    "/ retry after converting to float
     (self isLimitedPrecisionReal not
     or:[self generality < 1.0 generality]) ifTrue:[
         ^ self asFloat tanh.
     ].
+    "/ very slow fallback
     ^ self tanh_withAccuracy:self epsilon
 
 "/ If a fast exp is available, the following might be better...