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 |