#include <iostream>
#include <iomanip>
#include <limits>
#include <math.h>
using namespace std;
void test(double value)
{
int digits_before = 1 + (int)floor(log10(fabs(value)));
int digits_after = std::numeric_limits<double>::digits10 - digits_before;
double whole = floor(pow(10, digits_after) * fabs(value) + 0.5);
while (digits_after > 0 && (whole/10.0 - floor(whole/10.0)) < 0.05)
{
--digits_after;
whole = floor(whole / 10.0 + 0.5);
}
if (digits_after < 0) digits_after = 0;
cout << std::fixed << std::setprecision(digits_after) << value << endl;
}
int main() {
test(3.14);
test(3.14159);
test(1000);
test(1000.00000000001);
test(0.00001);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGxpbWl0cz4KI2luY2x1ZGUgPG1hdGguaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgdGVzdChkb3VibGUgdmFsdWUpCnsKICAgIGludCBkaWdpdHNfYmVmb3JlID0gMSArIChpbnQpZmxvb3IobG9nMTAoZmFicyh2YWx1ZSkpKTsKICAgIGludCBkaWdpdHNfYWZ0ZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmRpZ2l0czEwIC0gZGlnaXRzX2JlZm9yZTsKICAgIGRvdWJsZSB3aG9sZSA9IGZsb29yKHBvdygxMCwgZGlnaXRzX2FmdGVyKSAqIGZhYnModmFsdWUpICsgMC41KTsKICAgIHdoaWxlIChkaWdpdHNfYWZ0ZXIgPiAwICYmICh3aG9sZS8xMC4wIC0gZmxvb3Iod2hvbGUvMTAuMCkpIDwgMC4wNSkKICAgIHsKICAgICAgICAtLWRpZ2l0c19hZnRlcjsKICAgICAgICB3aG9sZSA9IGZsb29yKHdob2xlIC8gMTAuMCArIDAuNSk7CiAgICB9CiAgICBpZiAoZGlnaXRzX2FmdGVyIDwgMCkgZGlnaXRzX2FmdGVyID0gMDsKICAgIGNvdXQgPDwgc3RkOjpmaXhlZCA8PCBzdGQ6OnNldHByZWNpc2lvbihkaWdpdHNfYWZ0ZXIpIDw8IHZhbHVlIDw8IGVuZGw7Cn0KCmludCBtYWluKCkgewoJdGVzdCgzLjE0KTsKCXRlc3QoMy4xNDE1OSk7Cgl0ZXN0KDEwMDApOwoJdGVzdCgxMDAwLjAwMDAwMDAwMDAxKTsKCXRlc3QoMC4wMDAwMSk7CiAgICByZXR1cm4gMDsKfQ==