fork download
  1. #include <iostream>
  2. #include <cstdint>
  3. #include <cctype>
  4. using namespace std;
  5. template <class T> T machineZero(void) {
  6. T e0 = (T) 0.0F;
  7.  
  8. for (T e1 = (T) 1.0F; e1 > (T) 0.0F; e1 /= (T) 2.0F) {
  9. e0 = e1;
  10. }
  11. return e0;
  12. }
  13.  
  14. template <class T> T machineEpsilon(void) {
  15. T ep0 = (T) 0.0F;
  16. T ep = (T) 1.0F;
  17. for (T f = (T) 1.0F + ep; f > (T) 1.0F; f = (T) 1.0F + ep) {
  18. ep0 = ep;
  19. ep /= (T) 2.0F;
  20. }
  21. return ep;
  22. }
  23.  
  24. int main()
  25. {
  26. cout << "Positive limit for type double : " << machineZero <double>() << endl;
  27. cout << "Positive limit for type float : " << machineZero <float> ( ) << endl;
  28. cout << "Positive limit for type long double : " << machineZero <long double>() << endl; // можно видеть, что MVS не делает разницы между double и LF даже для x64 набора комнад
  29. cout << "Machine epsilon for double : " << machineEpsilon <double>() << endl;
  30. cout << "Machine epsilon for float : " << machineEpsilon <float>() << endl;
  31. system("PAUSE");
  32. return 0;
  33. }
  34.  
Success #stdin #stdout #stderr 0s 16048KB
stdin
Standard input is empty
stdout
Positive limit for type  double : 4.94066e-324
Positive limit for type float : 1.4013e-45
Positive limit for type long double : 3.6452e-4951
Machine epsilon for double : 1.11022e-16
Machine epsilon for float : 5.96046e-08
stderr
sh: 1: PAUSE: not found