Number.st
changeset 24950 b05cc09c455e
parent 24938 3d1e65070dce
child 24959 aca1c02bc14a
--- a/Number.st	Fri Nov 22 01:49:39 2019 +0100
+++ b/Number.st	Fri Nov 22 01:50:55 2019 +0100
@@ -1002,6 +1002,14 @@
     "Created: / 16-06-2017 / 11:00:38 / cg"
 !
 
+ln2
+    "return ln(2) in my representation (and accuracy)."
+
+    ^ self subclassResponsibility
+
+
+!
+
 phi
     "return Phi in my representation (and accuracy)."
 
@@ -2147,6 +2155,32 @@
     "Modified: / 05-07-2017 / 17:23:06 / cg"
 !
 
+log2
+    "return log base-2 of the receiver.
+     Raises an exception, if the receiver is less or equal to zero.
+     Here, fallback to the general logarithm code."
+
+    (self isLimitedPrecisionReal not
+    or:[self generality < 1.0 generality]) ifTrue:[
+        |f|
+
+        (f := self asLongFloat) isFinite ifTrue:[
+            ^ f log2.
+        ].
+    ].
+    ^ self ln / self class ln2
+
+    "
+     2.0 log2  
+     4.0 log2  
+     (2.0 raisedTo:100.0) log2  
+     (10 raisedTo:1000) log2
+     (10 raisedTo:2000) log2
+     (10 raisedTo:4000) log2
+     (10 raisedTo:8000) log2
+    "
+!
+
 log:aNumber
     "return log base aNumber of the receiver.
      This will usually return a float value"