#include <iostream>
#include <stdexcept>
#include <limits>
using namespace std;
double _div(double a, double b) throw(underflow_error)
{
double result = a / b;
if ( a && result < numeric_limits<double>::min() )
throw underflow_error("underflow!");
return result;
}
int main()
{
try {
double x = _div(numeric_limits<double>::min(), numeric_limits<double>::max());
cout << x << endl;
} catch (const exception &e) {
cout << e.what() << endl;
}
try {
double x = _div(0, 5);
cout << x << endl;
} catch (const exception &e) {
cout << e.what() << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RkZXhjZXB0PgojaW5jbHVkZSA8bGltaXRzPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmRvdWJsZSBfZGl2KGRvdWJsZSBhLCBkb3VibGUgYikgdGhyb3codW5kZXJmbG93X2Vycm9yKQp7CiAgICBkb3VibGUgcmVzdWx0ID0gYSAvIGI7CiAgICBpZiAoIGEgJiYgcmVzdWx0IDwgbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWluKCkgKQogICAgICAgIHRocm93IHVuZGVyZmxvd19lcnJvcigidW5kZXJmbG93ISIpOwogICAgcmV0dXJuIHJlc3VsdDsKfQoKaW50IG1haW4oKQp7CiAgICB0cnkgewogICAgICAgIGRvdWJsZSB4ID0gX2RpdihudW1lcmljX2xpbWl0czxkb3VibGU+OjptaW4oKSwgbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCkpOwogICAgICAgIGNvdXQgPDwgeCA8PCBlbmRsOwogICAgfSBjYXRjaCAoY29uc3QgZXhjZXB0aW9uICZlKSB7CiAgICAgICAgY291dCA8PCBlLndoYXQoKSA8PCBlbmRsOwogICAgfQogICAgdHJ5IHsKICAgICAgICBkb3VibGUgeCA9IF9kaXYoMCwgNSk7CiAgICAgICAgY291dCA8PCB4IDw8IGVuZGw7CiAgICB9IGNhdGNoIChjb25zdCBleGNlcHRpb24gJmUpIHsKICAgICAgICBjb3V0IDw8IGUud2hhdCgpIDw8IGVuZGw7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=