Sorting positive NaN's and negative NaN's in a vector
I am attempting to create a program using a bubble sort in c++, i have to include positive and negative NaNs and sort them,I have got to the point where my program will sort negative to positive in ascending order including -0 and 0 but i am stuck on making it so that the NaNs are not mixed up.
How would i go about sorting these NaNs, possibly with the -Nans on the LHS of the integers and the NaNs on the RHS?
You can use isnan to detect NaN and signbit to check its sign. You can use signbit to distinguish between positive and negative 0 too.
You will need to make a custom comparator to actually do sorting.
bool double_order(double lhs, double rhs)
if(std::signbit(lhs)) //Negative NaN is less than anything
return not (std::isnan(rhs) && std::signbit(rhs)); //Except another -NaN
return false; //Positive NaN are never less than anything
if(std::signbit(rhs)) //Negative nans are tot larger than anything
else //Positive NaN are larger than anything
return true; //Except other +NaN, which is covered earlier
if(lhs == 0.0 && rhs == 0.0) //If both operands are 0, check for ±0
return std::signbit(lhs) > std::signbit(rhs); //signbit of negative is true
return lhs < rhs; //Otherwise do normal comparison (covers infinities)
Asked in February 2016Viewed 3,182 timesVoted 10Answered 1 times