Float.st
branchjv
changeset 19406 faccbadf3034
parent 19332 9686fae7951b
parent 19358 f9e7a37cffd9
child 19572 90f8a4a7060a
--- a/Float.st	Mon Mar 14 08:45:36 2016 +0000
+++ b/Float.st	Tue Mar 15 07:14:51 2016 +0000
@@ -1,5 +1,3 @@
-"{ Encoding: utf8 }"
-
 "
  COPYRIGHT (c) 1988 by Claus Gittinger
 	      All Rights Reserved
@@ -18,7 +16,7 @@
 LimitedPrecisionReal variableByteSubclass:#Float
 	instanceVariableNames:''
 	classVariableNames:'DefaultPrintFormat Pi E Halfpi HalfpiNegative Twopi
-		RadiansPerDegree Ln2 Ln10 Sqrt2 Epsilon'
+		RadiansPerDegree Ln2 Ln10 Sqrt2 Epsilon MaxSmallInteger'
 	poolDictionaries:''
 	category:'Magnitude-Numbers'
 !
@@ -409,6 +407,33 @@
     "
 !
 
+fromInteger:anInteger
+    "return a new float, given an integer value"
+
+%{  /* NOCONTEXT */
+#ifdef __SCHTEAM__
+    if (anInteger.isSmallInteger()) {
+        return __c__._RETURN( STDouble._new( (double)(anInteger.longValue()) ));
+    }
+#else
+    OBJ newFloat;
+
+    if (__isSmallInteger(anInteger)) {
+        double f = (double)__smallIntegerVal(anInteger);
+        __qMKFLOAT(newFloat, f);   /* OBJECT ALLOCATION */
+        RETURN (newFloat);
+    }
+#endif /* not SCHTEAM */
+%}.
+    ^ super fromInteger:anInteger
+
+    "
+     Float fromInteger:123
+     Float fromInteger:(100 factorial)
+     (100 factorial) asFloat 
+    "
+!
+
 fromNumber:aNumber
     ^aNumber asFloat
 !
@@ -577,17 +602,18 @@
 
 initialize
     Pi isNil ifTrue:[
-	DefaultPrintFormat := '.15'.  "/ print 15 valid digits
-	Pi := 3.14159265358979323846264338327950288419716939937510582097494459.
-	Halfpi := Pi / 2.0.
-	HalfpiNegative := Halfpi negated.
-	Twopi := Pi * 2.0.
-	E := 2.7182818284590452353602874713526625.
-	Sqrt2 := 1.41421356237309504880168872420969808.
-	RadiansPerDegree := Pi / 180.0.
-	Ln2 := 0.69314718055994530941723212145817657.
-	Ln10 := 10.0 ln.
-	Epsilon := self computeEpsilon.
+        DefaultPrintFormat := '.15'.  "/ print 15 valid digits
+        Pi := 3.14159265358979323846264338327950288419716939937510582097494459.
+        Halfpi := Pi / 2.0.
+        HalfpiNegative := Halfpi negated.
+        Twopi := Pi * 2.0.
+        E := 2.7182818284590452353602874713526625.
+        Sqrt2 := 1.41421356237309504880168872420969808.
+        RadiansPerDegree := Pi / 180.0.
+        Ln2 := 0.69314718055994530941723212145817657.
+        Ln10 := 10.0 ln.
+        Epsilon := self computeEpsilon.
+        MaxSmallInteger := super maxSmallInteger.
     ].
 
     "
@@ -671,6 +697,10 @@
     "Created: / 07-06-2007 / 21:11:55 / cg"
 !
 
+maxSmallInteger
+    ^ MaxSmallInteger
+!
+
 pi
     "return the constant pi as Float"
 
@@ -745,6 +775,7 @@
     "
 ! !
 
+
 !Float class methodsFor:'queries'!
 
 exponentCharacter
@@ -810,6 +841,7 @@
     ^ 2 "must be careful here, whenever ST/X is used on VAX or a 370"
 ! !
 
+
 !Float methodsFor:'arithmetic'!
 
 * aNumber
@@ -2326,6 +2358,7 @@
     "
 ! !
 
+
 !Float methodsFor:'testing'!
 
 isFinite