FloatArray.st
changeset 15935 35582e2e065c
parent 14692 98e7a51e5d17
child 16638 45cb03e85f6a
equal deleted inserted replaced
15934:2ac38e84aab5 15935:35582e2e065c
    48     [author:]
    48     [author:]
    49 	Claus Gittinger
    49 	Claus Gittinger
    50 "
    50 "
    51 ! !
    51 ! !
    52 
    52 
    53 
       
    54 
       
    55 !FloatArray class methodsFor:'queries'!
    53 !FloatArray class methodsFor:'queries'!
    56 
    54 
    57 elementByteSize
    55 elementByteSize
    58     ^ 4
    56     ^ 4
    59 
    57 
    60     "Created: / 15-09-2011 / 14:12:39 / cg"
    58     "Created: / 15-09-2011 / 14:12:39 / cg"
    61 ! !
    59 ! !
    62 
       
    63 
    60 
    64 !FloatArray methodsFor:'arithmetic'!
    61 !FloatArray methodsFor:'arithmetic'!
    65 
    62 
    66 * anObject
    63 * anObject
    67     "return the product of the receiver and the argument.
    64     "return the product of the receiver and the argument.
   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"
   957     "Modified (comment): / 07-10-2011 / 13:03:30 / cg"
   894     "Modified (comment): / 07-10-2011 / 13:03:30 / cg"
   958 !
   895 !
   959 
   896 
   960 numFloats
   897 numFloats
   961     ^ self size
   898     ^ self size
   962 !
       
   963 
       
   964 squaredLength
       
   965     "Return the squared length of the receiver interpreted as vector"
       
   966 
       
   967     ^ self dot: self
       
   968 ! !
   899 ! !
   969 
   900 
   970 !FloatArray methodsFor:'vector arithmetic'!
   901 !FloatArray methodsFor:'vector arithmetic'!
   971 
   902 
   972 dot: aFloatVector
   903 dot: aFloatVector
   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