Changeset 2324 for trunk/psLib/src/math/psStats.c
- Timestamp:
- Nov 10, 2004, 12:43:48 PM (22 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/math/psStats.c (modified) (14 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/math/psStats.c
r2273 r2324 9 9 * @author GLG, MHPCC 10 10 * 11 * @version $Revision: 1.8 5$ $Name: not supported by cvs2svn $12 * @date $Date: 2004-11- 04 01:04:59$11 * @version $Revision: 1.86 $ $Name: not supported by cvs2svn $ 12 * @date $Date: 2004-11-10 22:43:48 $ 13 13 * 14 14 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 55 55 psVector* p_psConvertToF32(psVector* in); 56 56 57 int p_psVectorRobustStats(const psVector* restrict myVector,58 const psVector* restrict maskVector,59 psU32 maskVal,60 psStats* stats);61 57 /*****************************************************************************/ 62 58 /* GLOBAL VARIABLES */ … … 129 125 130 126 /****************************************************************************** 131 ******************************************************************************132 ******************************************************************************133 127 MISC PRIVATE STATISTICAL FUNCTIONS 134 128 … … 141 135 Is the in data structure NULL? 142 136 Is the in data structure of type PS_TYPE_F32? 143 ****************************************************************************** 144 ****************************************************************************** 145 *****************************************************************************/ 146 137 138 *****************************************************************************/ 147 139 /****************************************************************************** 148 140 p_psVectorSampleMean(myVector, maskVector, maskVal, stats): calculates the … … 155 147 Returns 156 148 NULL 157 ASSUMPTION: the mean is always calculated exactly. Robust means are never158 calculated in this routine.159 149 *****************************************************************************/ 160 150 … … 185 175 } 186 176 } 187 mean /= (float)count; 177 if (count != 0) { 178 mean /= (float)count; 179 } else { 180 mean = NAN; 181 } 182 188 183 } else { 189 184 for (i = 0; i < myVector->n; i++) { … … 193 188 } 194 189 } 195 mean /= (float)count; 190 if (count != 0) { 191 mean /= (float)count; 192 } else { 193 mean = NAN; 194 } 196 195 } 197 196 } else { … … 203 202 } 204 203 } 205 mean /= (float)count; 204 if (count != 0) { 205 mean /= (float)count; 206 } else { 207 mean = NAN; 208 } 206 209 } else { 207 210 for (i = 0; i < myVector->n; i++) { … … 466 469 467 470 // Calculate the median exactly. 468 // XXX: Is this the correct action?469 471 if (0 == (nValues % 2)) { 470 472 stats->sampleMedian = 0.5 * (sortedVector->data.F32[(nValues / 2) - 1] + … … 700 702 } 701 703 } 702 countFloat = (float)countInt; 703 704 #ifdef DARWIN 705 706 stats->sampleStdev = (float)sqrt((sumSquares - (sumDiffs * sumDiffs / countFloat)) / (countFloat - 1)); 707 #else 708 709 stats->sampleStdev = sqrtf((sumSquares - (sumDiffs * sumDiffs / countFloat)) / (countFloat - 1)); 710 #endif 704 if (countInt < 2) { 705 stats->sampleStdev = NAN; 706 // XXX PS WARNING 707 } else { 708 countFloat = (float)countInt; 709 #ifdef DARWIN 710 711 stats->sampleStdev = (float)sqrt((sumSquares - (sumDiffs * sumDiffs / countFloat)) / (countFloat - 1)); 712 #else 713 714 stats->sampleStdev = sqrtf((sumSquares - (sumDiffs * sumDiffs / countFloat)) / (countFloat - 1)); 715 #endif 716 717 } 711 718 } 712 719 … … 756 763 } 757 764 // 1. Compute the sample median. 758 // XXX: This seems odd. Verify with IfA that we want to calculate the759 // median here, not the mean.760 765 p_psVectorSampleMedian(myVector, maskVector, maskVal, stats); 761 766 … … 828 833 } 829 834 835 // Ensure that max!=min before we divide by (max-min) 836 if (FLT_EPSILON < fabs(max - min)) { 837 for (i = 0; i < myData->n; i++) { 838 myData->data.F32[i] = outLow + (myData->data.F32[i] - min) * (outHigh - outLow) / (max - min); 839 } 840 } else { 841 XXX: 842 PS_WARNING 843 for (i = 0; i < myData->n; i++) { 844 myData->data.F32[i] = outLow; 845 } 846 } 847 830 848 for (i = 0; i < myData->n; i++) { 831 849 myData->data.F32[i] = outLow + (myData->data.F32[i] - min) * (outHigh - outLow) / (max - min); … … 849 867 } 850 868 851 for (i = 0; i < myData->n; i++) { 852 myData->data.F64[i] = outLow + (myData->data.F64[i] - min) * (outHigh - outLow) / (max - min); 869 // Ensure that max!=min before we divide by (max-min) 870 if (FLT_EPSILON < fabs(max - min)) { 871 for (i = 0; i < myData->n; i++) { 872 myData->data.F64[i] = outLow + (myData->data.F64[i] - min) * (outHigh - outLow) / (max - min); 873 } 874 } else { 875 XXX: 876 PS_WARNING 877 for (i = 0; i < myData->n; i++) { 878 myData->data.F64[i] = outLow; 879 } 853 880 } 854 881 } … … 1157 1184 sumNfit += (float)robustHistogram->nums->data.U32[i]; 1158 1185 } 1186 // XXX: divide by zero? 1159 1187 myMean /= countFloat; 1160 1188
Note:
See TracChangeset
for help on using the changeset viewer.
