--- a/Integer.st Tue Oct 26 23:47:50 1999 +0200
+++ b/Integer.st Wed Oct 27 00:09:05 1999 +0200
@@ -1728,8 +1728,7 @@
raisedToInteger:exp
"return the receiver raised to exp"
- |result e t bits "{SmallInteger}"
- eI "{SmallInteger}" |
+ |result e t bits "{SmallInteger}"|
"use the addition chaining algorithm"
@@ -1741,25 +1740,24 @@
e := exp.
].
-"/ (e class == SmallInteger) ifTrue:[
-"/ eI := e.
-"/ [eI ~~ 0] whileTrue:[
-"/ [(eI bitAnd:1) == 0] whileTrue:[
-"/ eI := eI bitShift:-1.
-"/ t := t * t.
-"/ ].
-"/ eI := eI - 1.
+ [e ~~ 0] whileTrue:[
+ [(e bitAnd:1) == 0] whileTrue:[
+ e := e bitShift:-1.
+ t := t * t.
+ ].
+ e := e - 1.
+ result := result * t.
+ ].
+
+"/ the new algorithm above is somewhat faster (15%)
+"/
+"/ bits := e highBit.
+"/
+"/ 1 to:bits do:[:i|
+"/ (e bitAt:i) == 1 ifTrue:[
"/ result := result * t.
"/ ].
-"/ ] ifFalse:[
- bits := e highBit.
-
- 1 to:bits do:[:i|
- (e bitAt:i) == 1 ifTrue:[
- result := result * t.
- ].
- t := t * t.
- ].
+"/ t := t * t.
"/ ].
(exp < 0) ifTrue:[
@@ -1770,30 +1768,35 @@
"
+ (2 raisedToInteger:216)
(2 raisedTo:216)
-> 105312291668557186697918027683670432318895095400549111254310977536
+
+ (2 raisedToInteger:216) asFloat
(2 raisedTo:216) asFloat
-> 1.05312E+65
+
+ (2 raisedToInteger:500)
(2 raisedTo:500)
-> 3273390607896141870013189696827599152216642046043064789483291368096133796404674554883270092325904157150886684127560071009217256545885393053328527589376
- 2 raisedTo:10
+ 2 raisedToInteger:10
-> 1024
- -2 raisedTo:10
+ -2 raisedToInteger:10
-> 1024
- -2 raisedTo:9
+ -2 raisedToInteger:9
-> -512
- 10 raisedTo:-10
+ 10 raisedToInteger:-10
-> (1/10000000000)
- 2 raisedTo:0
+ 2 raisedToInteger:0
-> 1
- 2 raisedTo:-1
+ 2 raisedToInteger:-1
-> (1/2)
Time millisecondsToRun:[
10000 timesRepeat:[
(2 raisedToInteger:500)
]
- ]
+ ]
Time millisecondsToRun:[
|bigNum|
@@ -2482,5 +2485,5 @@
!Integer class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/Integer.st,v 1.117 1999-10-26 20:58:06 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/Integer.st,v 1.118 1999-10-26 22:09:05 cg Exp $'
! !