+string MothurOut::findEdianness() {
+ try {
+ // find real endian type
+ unsigned char EndianTest[2] = {1,0};
+ short x = *(short *)EndianTest;
+
+ string endianType = "unknown";
+ if(x == 1) { endianType = "BIG_ENDIAN"; }
+ else { endianType = "LITTLE_ENDIAN"; }
+
+ return endianType;
+ }
+ catch(exception& e) {
+ errorOut(e, "MothurOut", "findEdianness");
+ exit(1);
+ }
+}
+/***********************************************************************/
+double MothurOut::median(vector<double> x) {
+ try {
+ double value = 0.0;
+
+ if (x.size() == 0) { } //error
+ else {
+ //For example, if a < b < c, then the median of the list {a, b, c} is b, and, if a < b < c < d, then the median of the list {a, b, c, d} is the mean of b and c; i.e., it is (b + c)/2.
+ sort(x.begin(), x.end());
+ //is x.size even?
+ if ((x.size()%2) == 0) { //size() is even. median = average of 2 midpoints
+ int midIndex1 = (x.size()/2)-1;
+ int midIndex2 = (x.size()/2);
+ value = (x[midIndex1]+ x[midIndex2]) / 2.0;
+ }else {
+ int midIndex = (x.size()/2);
+ value = x[midIndex];
+ }
+ }
+ return value;
+ }
+ catch(exception& e) {
+ errorOut(e, "MothurOut", "median");
+ exit(1);
+ }
+}
+/***********************************************************************/