963 2 ** 4 |
963 2 ** 4 |
964 10 ** 4 |
964 10 ** 4 |
965 " |
965 " |
966 ! |
966 ! |
967 |
967 |
968 raisedTo:aNumber |
|
969 "return the receiver raised to aNumber" |
|
970 |
|
971 aNumber = 0 ifTrue:[^ 1]. |
|
972 aNumber = 1 ifTrue:[^ self]. |
|
973 aNumber isInteger ifTrue:[ |
|
974 ^ self raisedToInteger:aNumber |
|
975 ]. |
|
976 ^ self asFloat raisedTo:aNumber |
|
977 |
|
978 " |
|
979 2 raisedTo: 4 |
|
980 10 raisedTo: 4 |
|
981 " |
|
982 ! |
|
983 |
|
984 raisedToInteger:exp |
|
985 "return the receiver raised to exp" |
|
986 |
|
987 |result e t| |
|
988 |
|
989 "use the addition chaining algorithm, |
|
990 which is much faster for big exp-arguments" |
|
991 |
|
992 result := 1. |
|
993 t := self. |
|
994 exp < 0 ifTrue:[ |
|
995 e := exp negated. |
|
996 ] ifFalse:[ |
|
997 e := exp. |
|
998 ]. |
|
999 |
|
1000 [e ~~ 0] whileTrue:[ |
|
1001 [(e bitAnd:1) == 0] whileTrue:[ |
|
1002 e := e bitShift:-1. |
|
1003 t := t * t. |
|
1004 ]. |
|
1005 e := e - 1. |
|
1006 result := result * t. |
|
1007 ]. |
|
1008 |
|
1009 (exp < 0) ifTrue:[ |
|
1010 ^ 1 / result |
|
1011 ]. |
|
1012 |
|
1013 ^ result |
|
1014 |
|
1015 |
|
1016 " |
|
1017 (2 raisedToInteger:216) |
|
1018 (2 raisedTo:216) |
|
1019 -> 105312291668557186697918027683670432318895095400549111254310977536 |
|
1020 |
|
1021 (2 raisedToInteger:216) asFloat |
|
1022 (2 raisedTo:216) asFloat |
|
1023 -> 1.05312E+65 |
|
1024 |
|
1025 (2 raisedToInteger:500) |
|
1026 (2 raisedTo:500) |
|
1027 -> 3273390607896141870013189696827599152216642046043064789483291368096133796404674554883270092325904157150886684127560071009217256545885393053328527589376 |
|
1028 2 raisedToInteger:10 |
|
1029 -> 1024 |
|
1030 -2 raisedToInteger:10 |
|
1031 -> 1024 |
|
1032 -2 raisedToInteger:9 |
|
1033 -> -512 |
|
1034 10 raisedToInteger:-10 |
|
1035 -> (1/10000000000) |
|
1036 2 raisedToInteger:0 |
|
1037 -> 1 |
|
1038 2 raisedToInteger:-1 |
|
1039 -> (1/2) |
|
1040 |
|
1041 Time millisecondsToRun:[ |
|
1042 10000 timesRepeat:[ |
|
1043 (2 raisedToInteger:500) |
|
1044 ] |
|
1045 ] |
|
1046 |
|
1047 Time millisecondsToRun:[ |
|
1048 |bigNum| |
|
1049 bigNum := 2 raisedToInteger:500. |
|
1050 10 timesRepeat:[ |
|
1051 (bigNum raisedToInteger:500) |
|
1052 ] |
|
1053 ] |
|
1054 " |
|
1055 |
|
1056 "Created: / 27.4.1999 / 15:19:22 / stefan" |
|
1057 "Modified: / 27.4.1999 / 16:16:11 / stefan" |
|
1058 ! |
|
1059 |
|
1060 squared |
968 squared |
1061 "return receiver * receiver" |
969 "return receiver * receiver" |
1062 |
970 |
1063 ^ self * self |
971 ^ self * self |
1064 ! ! |
972 ! ! |