Advertisement
goatbar

NaN versus -NaN

Oct 2nd, 2015
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.77 KB | None | 0 0
  1. #include <cmath>
  2. #include <cstdio>
  3. #include <cfloat>
  4. #include <limits>
  5. #include <iostream>
  6. #include <stdint.h>
  7.  
  8. int main()
  9. {
  10.   {
  11.     double dfNan = std::numeric_limits<double>::quiet_NaN();
  12.     double dfNegNan = -std::numeric_limits<double>::quiet_NaN();
  13.  
  14.     uint64_t *nNan = (uint64_t *)&dfNan;
  15.     uint64_t *nNegNan = (uint64_t *)&dfNegNan;
  16.     std::cout << ": " << std::hex << *nNan << "\n";
  17.     std::cout << ": " << std::hex << *nNegNan << "\n";
  18.   }
  19.  
  20.   {
  21.     float fNan = std::numeric_limits<double>::quiet_NaN();
  22.     float fNegNan = -std::numeric_limits<double>::quiet_NaN();
  23.  
  24.     uint32_t *nNan = (uint32_t *)&fNan;
  25.     uint32_t *nNegNan = (uint32_t *)&fNegNan;
  26.     std::cout << ": " << std::hex << *nNan << "\n";
  27.     std::cout << ": " << std::hex << *nNegNan << "\n";
  28.   }
  29.  
  30.   std::cout << "1: " << -std::numeric_limits<double>::quiet_NaN() << "\n";
  31.   std::cout << "2: " << std::hex << (uint64_t)std::numeric_limits<double>::quiet_NaN() << "\n";
  32.   std::cout << "3: " << std::hex << (uint64_t)-std::numeric_limits<double>::quiet_NaN() << "\n";
  33.   std::cout << "4: " << std::hex << (uint32_t)std::numeric_limits<float>::quiet_NaN() << "\n";
  34.   std::cout << "5: " << std::hex << (uint32_t)-std::numeric_limits<float>::quiet_NaN() << "\n";
  35.  
  36.   std::cout << std::signbit(std::numeric_limits<double>::quiet_NaN()) << "\n";
  37.   std::cout << std::signbit(-std::numeric_limits<double>::quiet_NaN()) << "\n";
  38.   std::cout << std::signbit(std::numeric_limits<float>::quiet_NaN()) << "\n";
  39.   std::cout << std::signbit(-std::numeric_limits<float>::quiet_NaN()) << "\n";
  40.  
  41.   return 0;
  42.  
  43. }
  44. /*
  45. g++ -std=c++11 -o nan -g -Wall -Wextra nan.cc && ./nan
  46. : 7ff8000000000000
  47. : fff8000000000000
  48. : 7fc00000
  49. : ffc00000
  50. 1: -nan
  51. 2: 8000000000000000
  52. 3: 8000000000000000
  53. 4: 0
  54. 5: 0
  55. 0
  56. 1
  57. 0
  58. 1
  59. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement