#include #include int main() { using namespace std; using bigint = boost::multiprecision::cpp_int; unsigned T; cin >> T; for ([[maybe_unused]] const auto _ : views::repeat(monostate{}, T)) [] { unsigned N; double _x; cin >> N >> _x; int X = round(_x * 100000), Y = 100000; int g{gcd(X, Y)}; X /= g; Y /= g; bigint real = 1, imag = 0; for (unsigned i{8}; i--; ) { tie(real, imag) = pair{real * real - imag * imag, real * imag * 2}; if (N + 1 >> i & 1) tie(real, imag) = pair{-real * X - imag * Y, real * Y - imag * X}; } long abs_sq = static_cast(X) * X + static_cast(Y) * Y; int abs_round = round(sqrt(abs_sq)); bigint ans; if (abs_sq == static_cast(abs_round) * abs_round) { bigint abs_div = abs_round; ans = max(imag, -imag) * g; for (unsigned i{}; i < 8; ++i) { if (N >> i & 1) ans /= abs_div; abs_div *= abs_div; } } else { bigint abs_div = abs_sq; bigint mag_sq = imag * imag * g * g; for (unsigned i{}; i < 8; ++i) { if (N >> i & 1) mag_sq /= abs_div; abs_div *= abs_div; } ans = static_cast(sqrt(static_cast(mag_sq)) + 1); if (mag_sq != 0) { do { ans = (ans + mag_sq / ans) / 2; } while (mag_sq / ans / ans == 0); } } cout << (imag < 0 ? "-" : "") << ans / 100000 << "." << setw(5) << setfill('0') << ans % 100000 << endl; }(); abort(); return 0; }