#include using namespace std; using ld = long double; ld f(long x, ld Q, ld R, int remain, ld p) { ld a = (remain - x) * (Q - (1.0 - p) * R); // もみ消す ld b = Q * ((1.0 - pow(p, x)) / (1.0 - p)); // クビになる(ゼロ除算に注意) return a + b; } ld g(long x, ld Q, ld R, long remain, ld p) { ld a = -Q + (1 - p) * R; ld b = Q * pow(p, x); return a + b; } ld h(long t, long N, ld X, ld Y, ld P, ld Q, ld R) { long skill = X + t * Y; ld p = 1.0 - 1.0 / skill; long remain = N - t; if (skill == 1) { // 必ず卵をかけてしまう場合 if (remain == 1) { return P * t + Q; } else { return P * t + (Q - R) * (remain - 1) + Q; } } ld u = 0; if ((1.0 - p) * R >= Q) { u = remain; } else { u = min(remain, max(0L, long(log(1.0 - (1 - p) * R / Q) / log(p) + 1.0))); } return P * t + f(u, Q, R, remain, p); } int main(void) { auto solve = []() { long N, X, Y; cin >> N >> X >> Y; ld P, Q, R; cin >> P >> Q >> R; long l = 0, r = N; while (r - l > 3) { long m1 = l + (r - l) / 3; long m2 = r - (r - l) / 3; ld v1 = h(m1, N, X, Y, P, Q, R); ld v2 = h(m2, N, X, Y, P, Q, R); if (v1 < v2) { l = m1; } else { r = m2; } } ld ans = 0; for (long t = l; t <= r; ++t) { ans = max(ans, h(t, N, X, Y, P, Q, R)); } cout << fixed << setprecision(10) << ans << endl; }; int T; cin >> T; for (int i = 0; i < T; i++) { solve(); } }