Number.st
changeset 7468 61c8a3053bf4
parent 7456 42a1cbc55b6c
child 7729 bbd20db09d1b
equal deleted inserted replaced
7467:8c4475cadbd0 7468:61c8a3053bf4
   748     "return log base aNumber of the receiver"
   748     "return log base aNumber of the receiver"
   749 
   749 
   750     ^ self ln / aNumber ln
   750     ^ self ln / aNumber ln
   751 !
   751 !
   752 
   752 
       
   753 raisedTo:aNumber
       
   754     "return the receiver raised to aNumber"
       
   755 
       
   756     aNumber = 0 ifTrue:[^ 1].
       
   757     aNumber = 1 ifTrue:[^ self].
       
   758     aNumber isInteger ifTrue:[
       
   759         ^ self raisedToInteger:aNumber
       
   760     ].
       
   761     ^ self asFloat raisedTo:aNumber
       
   762 
       
   763     "
       
   764      2 raisedTo: 4    
       
   765      10 raisedTo: 4    
       
   766     "
       
   767 !
       
   768 
       
   769 raisedToInteger:exp 
       
   770     "return the receiver raised to exp"
       
   771 
       
   772     |result e t|
       
   773 
       
   774     "use the addition chaining algorithm,
       
   775      which is much faster for big exp-arguments"
       
   776 
       
   777     result := 1.
       
   778     t := self.
       
   779     exp < 0 ifTrue:[
       
   780         e := exp negated.
       
   781     ] ifFalse:[
       
   782         e := exp.
       
   783     ].
       
   784 
       
   785     [e ~~ 0] whileTrue:[
       
   786         [(e bitAnd:1) == 0] whileTrue:[
       
   787             e := e bitShift:-1.
       
   788             t := t * t.
       
   789         ].
       
   790         e := e - 1.
       
   791         result := result * t.
       
   792     ].
       
   793 
       
   794     (exp < 0) ifTrue:[
       
   795         ^ 1 / result
       
   796     ].
       
   797 
       
   798     ^ result
       
   799 
       
   800 
       
   801     "
       
   802      (2 raisedToInteger:216)
       
   803      (2 raisedTo:216) 
       
   804 -> 105312291668557186697918027683670432318895095400549111254310977536     
       
   805 
       
   806      (2 raisedToInteger:216) asFloat     
       
   807      (2 raisedTo:216) asFloat     
       
   808 -> 1.05312E+65
       
   809 
       
   810      (2 raisedToInteger:500)
       
   811      (2 raisedTo:500) 
       
   812 -> 3273390607896141870013189696827599152216642046043064789483291368096133796404674554883270092325904157150886684127560071009217256545885393053328527589376
       
   813      2 raisedToInteger:10 
       
   814 -> 1024
       
   815     -2 raisedToInteger:10
       
   816 -> 1024
       
   817      -2 raisedToInteger:9
       
   818 -> -512
       
   819      10 raisedToInteger:-10
       
   820 -> (1/10000000000)
       
   821      2 raisedToInteger:0 
       
   822 -> 1
       
   823      2 raisedToInteger:-1 
       
   824 -> (1/2)
       
   825 
       
   826      Time millisecondsToRun:[
       
   827         10000 timesRepeat:[
       
   828             (2 raisedToInteger:500)
       
   829         ]
       
   830      ]  
       
   831 
       
   832      Time millisecondsToRun:[
       
   833         |bigNum|
       
   834         bigNum := 2 raisedToInteger:500.
       
   835         10 timesRepeat:[
       
   836             (bigNum raisedToInteger:500)
       
   837         ]
       
   838      ]
       
   839     "
       
   840 
       
   841     "Created: / 27.4.1999 / 15:19:22 / stefan"
       
   842     "Modified: / 27.4.1999 / 16:16:11 / stefan"
       
   843 !
       
   844 
   753 real
   845 real
   754     "Return the real part of this Number."
   846     "Return the real part of this Number."
   755 
   847 
   756     ^ self
   848     ^ self
   757 
   849 
  1611 ! !
  1703 ! !
  1612 
  1704 
  1613 !Number class methodsFor:'documentation'!
  1705 !Number class methodsFor:'documentation'!
  1614 
  1706 
  1615 version
  1707 version
  1616     ^ '$Header: /cvs/stx/stx/libbasic/Number.st,v 1.86 2003-06-26 14:39:23 cg Exp $'
  1708     ^ '$Header: /cvs/stx/stx/libbasic/Number.st,v 1.87 2003-07-02 09:34:42 cg Exp $'
  1617 ! !
  1709 ! !