710 " |
707 " |
711 ! ! |
708 ! ! |
712 |
709 |
713 !FloatArray methodsFor:'queries'! |
710 !FloatArray methodsFor:'queries'! |
714 |
711 |
715 absMax |
|
716 "return the largest absolute value" |
|
717 |
|
718 |minMax| |
|
719 |
|
720 minMax := self minMax. |
|
721 ^ (minMax at:1) abs max:(minMax at:2) abs |
|
722 |
|
723 " |
|
724 |f1| |
|
725 |
|
726 f1 := (1 to:1000) asFloatArray. |
|
727 Time millisecondsToRun:[ 1000 timesRepeat:[ f1 absMax ] ] |
|
728 " |
|
729 |
|
730 " |
|
731 |f1| |
|
732 |
|
733 f1 := FloatArray withAll:#(1 2 3 4 5). |
|
734 f1 absMax |
|
735 " |
|
736 " |
|
737 |f1| |
|
738 |
|
739 f1 := FloatArray withAll:#(5 4 3 2 1). |
|
740 f1 absMax |
|
741 " |
|
742 " |
|
743 |f1| |
|
744 |
|
745 f1 := FloatArray withAll:#(5 -4 3 2 1). |
|
746 f1 absMax |
|
747 " |
|
748 " |
|
749 |f1| |
|
750 |
|
751 f1 := FloatArray withAll:#(5 -5 3 2 1). |
|
752 f1 absMax |
|
753 " |
|
754 " |
|
755 |f1| |
|
756 |
|
757 f1 := FloatArray withAll:#(5 -6 3 2 1). |
|
758 f1 absMax |
|
759 " |
|
760 ! |
|
761 |
|
762 defaultElement |
712 defaultElement |
763 ^ ShortFloat zero |
713 ^ ShortFloat zero |
764 ! |
|
765 |
|
766 length |
|
767 "Return the length of the receiver interpreted as vector |
|
768 (that is the length of the vector from 0.0 @ 0.0 @ ... @ 0.0 |
|
769 to the point in the n-dimensional space represented by the receiver)" |
|
770 |
|
771 ^ self squaredLength sqrt |
|
772 |
|
773 " |
|
774 #(10.0 10.0) asFloatArray length |
|
775 #(10.0 10.0 10.0) asFloatArray length |
|
776 " |
|
777 ! |
714 ! |
778 |
715 |
779 max |
716 max |
780 "return the largest element; |
717 "return the largest element; |
781 redefined for speed" |
718 redefined for speed" |
978 "/ <primitive:'primitiveDotProduct' module: 'FloatArrayPlugin'> |
909 "/ <primitive:'primitiveDotProduct' module: 'FloatArrayPlugin'> |
979 %{ |
910 %{ |
980 if (__isFloats(aFloatVector) |
911 if (__isFloats(aFloatVector) |
981 && (__ClassInstPtr(__qClass(self))->c_ninstvars == __mkSmallInteger(0)) |
912 && (__ClassInstPtr(__qClass(self))->c_ninstvars == __mkSmallInteger(0)) |
982 && (__ClassInstPtr(__qClass(aFloatVector))->c_ninstvars == __mkSmallInteger(0))) { |
913 && (__ClassInstPtr(__qClass(aFloatVector))->c_ninstvars == __mkSmallInteger(0))) { |
983 INT __mySize = __floatArraySize(self); |
914 INT __mySize = __floatArraySize(self); |
984 INT __otherSize = __floatArraySize(aFloatVector); |
915 INT __otherSize = __floatArraySize(aFloatVector); |
985 if (__mySize == __otherSize) { |
916 if (__mySize == __otherSize) { |
986 float *__p1 = __FloatArrayInstPtr(self)->f_element; |
917 float *__p1 = __FloatArrayInstPtr(self)->f_element; |
987 float *__p2 = __FloatArrayInstPtr(aFloatVector)->f_element; |
918 float *__p2 = __FloatArrayInstPtr(aFloatVector)->f_element; |
988 float __result = 0.0; |
919 float __result = 0.0; |
989 INT __i; |
920 INT __i; |
990 |
921 |
991 /* how about inline-mmx-asm for this ... */ |
922 /* how about inline-mmx-asm for this ... */ |
992 for (__i=0; __i<__mySize; __i++) { |
923 for (__i=0; __i<__mySize; __i++) { |
993 __result = __result + (__p1[__i] * __p2[__i]); |
924 __result = __result + (__p1[__i] * __p2[__i]); |
994 } |
925 } |
995 RETURN (__MKFLOAT(__result)); |
926 RETURN (__MKFLOAT(__result)); |
996 } |
927 } |
997 } |
928 } |
998 %}. |
929 %}. |
999 |
930 ^ super dot:aFloatVector |
1000 mySize := self size. |
|
1001 mySize = aFloatVector size ifFalse:[^self error:'Must be of equal size']. |
|
1002 result := 0.0. |
|
1003 1 to: mySize do:[:i| |
|
1004 result := result + ((self at: i) * (aFloatVector at: i)). |
|
1005 ]. |
|
1006 ^result |
|
1007 |
931 |
1008 " |
932 " |
1009 |v| |
933 |v| |
1010 |
934 |
1011 v := #(2.0 2.0 1.0) asFloatArray. |
935 v := #(2.0 2.0 1.0) asFloatArray. |
1012 v dot:v. |
936 v dot:v. |
1013 " |
937 " |
1014 |
938 |
1015 "Created: / 29-05-2007 / 13:13:39 / cg" |
939 "Created: / 29-05-2007 / 13:13:39 / cg" |
1016 ! ! |
940 ! ! |
1017 |
941 |
1018 !FloatArray class methodsFor:'documentation'! |
942 !FloatArray class methodsFor:'documentation'! |
1019 |
943 |
1020 version |
944 version |
1021 ^ '$Header: /cvs/stx/stx/libbasic/FloatArray.st,v 1.31 2013-01-23 18:03:01 cg Exp $' |
945 ^ '$Header: /cvs/stx/stx/libbasic/FloatArray.st,v 1.32 2014-02-04 16:40:34 cg Exp $' |
1022 ! |
946 ! |
1023 |
947 |
1024 version_CVS |
948 version_CVS |
1025 ^ '$Header: /cvs/stx/stx/libbasic/FloatArray.st,v 1.31 2013-01-23 18:03:01 cg Exp $' |
949 ^ '$Header: /cvs/stx/stx/libbasic/FloatArray.st,v 1.32 2014-02-04 16:40:34 cg Exp $' |
1026 ! ! |
950 ! ! |
|
951 |