#include #include #include template float_t machine_eps() { union { float_t f; int_t i; } one, one_plus, little, last_little; one.f = 1.0; little.f = 1.0; last_little.f = little.f; while(true) { one_plus.f = one.f; one_plus.f += little.f; if( one.i != one_plus.i ) { last_little.f = little.f; little.f /= 2.0; } else { return last_little.f; } } } int main() { std::cout << "machine epsilon:\n"; std::cout << "float: " << std::setprecision(18)<< machine_eps() << std::endl; std::cout << "double: " << std::setprecision(18) << machine_eps() << std::endl; }