code_junkie

How to find mantissa length on a particular machine

Nov 14th, 2011
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.32 KB | None | 0 0
  1. float a = 1;
  2. float b = 0.5;
  3. int bits = 0;
  4. while (a + b != a) {
  5. bits = bits + 1;
  6. b = b / 2;
  7. }
  8.  
  9. #include <stdio.h>
  10. #include <float.h>
  11.  
  12. int main(void) {
  13. float a = 1;
  14. float b = 0.5;
  15. float c = a + b;
  16. int bits = 1;
  17. while (c != a) {
  18. bits = bits + 1;
  19. b = b / 2;
  20. c = a + b;
  21. }
  22. printf("%dn",FLT_MANT_DIG);
  23. printf("%dn",bits);
  24. return 0;
  25.  
  26. #include <iostream>
  27. #include <limits>
  28. #include <typeinfo>
  29.  
  30. template <typename T>
  31. void printDetailsFor() {
  32. std::cout
  33. << "Printing details for " << typeid(T).name() << ":n"
  34. << "tradix: " << std::numeric_limits<T>::radix << "n"
  35. << "tradix digits: " << std::numeric_limits<T>::digits << "n"
  36. << "tepsilon: " << std::numeric_limits<T>::epsilon() << "n"
  37. << std::endl;
  38. }
  39.  
  40. int main() {
  41. printDetailsFor<int>();
  42. printDetailsFor<float>();
  43. printDetailsFor<double>();
  44. printDetailsFor<long double>();
  45. return 0;
  46. }
  47.  
  48. Printing details for i:
  49. radix: 2
  50. radix digits: 31
  51. epsilon: 0
  52.  
  53. Printing details for f:
  54. radix: 2
  55. radix digits: 24
  56. epsilon: 1.19209e-07
  57.  
  58. Printing details for d:
  59. radix: 2
  60. radix digits: 53
  61. epsilon: 2.22045e-16
  62.  
  63. Printing details for e:
  64. radix: 2
  65. radix digits: 64
  66. epsilon: 1.0842e-19
Add Comment
Please, Sign In to add comment