fork download
  1. #include <iostream>
  2. #include <limits>
  3. #include <typeinfo>
  4.  
  5. #if 0
  6. #define ACTION(x) (T)(x)
  7. #else
  8. #define ACTION(x) x
  9. #endif
  10.  
  11. template< typename T >
  12. void zeige_epsilon()
  13. {
  14. using namespace std;
  15. T eps = 1;
  16. int radix = std::numeric_limits<T>::radix;
  17. for( T next_eps = eps; ACTION(T(1) + next_eps) > T(1); next_eps = eps/radix )
  18. eps = next_eps;
  19. cout << "Mein epsilon : " << eps << endl;
  20.  
  21. cout << "numeric_limits< " << typeid(T).name() << " >::epsilon: " << numeric_limits< T >::epsilon() << endl;
  22. cout << "Beide Epsilons sind " << (eps == numeric_limits< T >::epsilon()? "gleich": "verschieden") << "\n" << endl;
  23. }
  24.  
  25. int main()
  26. {
  27. zeige_epsilon< double >();
  28. zeige_epsilon< float >();
  29. zeige_epsilon< long double >();
  30. return 0;
  31. }
Success #stdin #stdout 0.01s 2684KB
stdin
Standard input is empty
stdout
Mein epsilon                     : 2.22045e-16
numeric_limits< d >::epsilon: 2.22045e-16
Beide Epsilons sind gleich

Mein epsilon                     : 1.19209e-07
numeric_limits< f >::epsilon: 1.19209e-07
Beide Epsilons sind gleich

Mein epsilon                     : 1.0842e-19
numeric_limits< e >::epsilon: 1.0842e-19
Beide Epsilons sind gleich