/** * author: loop0919 */ #include #include using namespace std; using namespace atcoder; /** * マクロやテンプレート用の自作ライブラリ */ namespace library { #pragma region types using ll = long long int; using i128 = __int128_t; using u128 = __uint128_t; using f128 = __float128; using mint = modint998244353; // using mint = modint1000000007; template using pq_max = priority_queue; template using pq_min = priority_queue, greater>; #pragma endregion #pragma region constants constexpr int INF32 = 1'000'000'000; constexpr ll INF64 = 2'000'000'000'000'000'000LL; constexpr int EMPTY = -1; constexpr int ALPHA = 26; #pragma endregion #pragma region macro #define __OVERLOAD_REP(_1, _2, _3, _4, _rep, ...) _rep #define __REP(n) for(int __i = 0; __i < (int)(n); __i++) #define __REP_1(i, n) for(int i = 0; i < (int)(n); i++) #define __REP_2(i, start, stop) for(int i = (int)(start); i < (int)(stop); i++) #define __REP_3(i, start, stop, step) for(int i = (int)(start); ((int)(step) >= 0) ? ((i) < (int)(stop)) : ((i) > (int)(stop)); (i) += (int)(step)) #define rep(...) __OVERLOAD_REP(__VA_ARGS__, __REP_3, __REP_2, __REP_1, __REP)(__VA_ARGS__) #define rrep(i, n) rep(i, (int)(n) - 1, -1, -1) #define all(...) std::begin(__VA_ARGS__), std::end(__VA_ARGS__) #define rall(...) std::rbegin(__VA_ARGS__), std::rend(__VA_ARGS__) #pragma endregion #pragma region stdio void prepare_io() { ios_base::sync_with_stdio(false); cin.tie(0); } #pragma endregion #pragma region input void __input(int &v) { cin >> v; } void __input(ll &v) { cin >> v; } void __input(mint &v) { ll v_ll; __input(v_ll); v = mint(v_ll); } void __input(double &v) { cin >> v; } void __input(char &v) { cin >> v; } void __input(string &v) { cin >> v; } template void __input(pair &v) { __input(v.first); __input(v.second); } template void __input_tuple(T &t) { if constexpr (N < tuple_size::value) { auto &x = std::get(t); __input(x); __input_tuple(t); } } template void __input(tuple &v) { __input_tuple(v); } template void __input(array &v) { for (T &d: v) __input(d); } template void __input(vector &v) { for (T &d: v) __input(d); } void input() {} template void input(H &h, T &... t) { __input(h), input(t...); } #pragma endregion #pragma region output template void __print(const char c) { cout << c; } template void __print(const string s) { for (char c: s) __print(c); } template void __print(const char *s) { int len = strlen(s); rep(i, len) __print(s[i]); } template void __print(int v) { cout << v; } template void __print(ll v) { cout << v; } template void __print(double v) { cout << fixed << setprecision(12) << v; } template void __print(const pair v) { __print(v.first); __print(sep); __print(v.secomd); } template void __print_tuple(const T t) { if constexpr (N < std::tuple_size::value) { if constexpr (N > 0) { __print(sep); } const auto x = std::get(t); __print(x); __print_tuple(t); } } template void __print(const tuple v) { __print_tuple(v); } template void __print(const array v) { int len = v.size(); rep(i, len) { if (i > 0) __print(sep); __print(v[i]); } } template void __print(const vector v) { int len = v.size(); rep(i, len) { if (i > 0) __print(sep); __print(v[i]); } } template void print(){ __print(end); } template void print(H &&head, T &&... tail) { __print(head); if (sizeof...(T) > 0) __print(sep); print(forward(tail)...); } #pragma endregion } using namespace library; constexpr double NONE = -1.0; void solve() { ll N, M, K; cin >> N >> M >> K; ll remain = (N * M) - K; double P = remain < M - 1 ? remain / (M - 1): 1.0; vector cache(N, NONE); auto dp = [&](this auto dp, ll n) { if (cache[n] != NONE) return cache[n]; if ((N - n - 1) * M >= K) { cache[n] = 1.0; return cache[n]; } if (n == 0) { cache[n] = P / M; return cache[n]; } double p = (double)(M - 1) / (M * (n + 1)) * P; p += (double)n / (n + 1) * dp(n - 1); cache[n] = p; return p; }; // rep(i, N) { // cout << dp(i) << ' '; // } // cout << '\n'; cout << dp(N - 1) << '\n'; } int main(){ cout << fixed << setprecision(12); prepare_io(); int T; cin >> T; while (T--) solve(); return 0; }