unittest
{
	assert( [ "2 3 1" ].parse.expand.solve == "1.000000" );
	assert( [ "1000000000 180707 0" ].parse.expand.solve == "0.000181" );
}



import std.conv;
import std.format;
import std.range;
import std.stdio;
import std.typecons;

void main()
{
	stdin.byLineCopy.parse.expand.solve.writeln;
}

auto parse( Range )( Range input )
if( isInputRange!Range && is( ElementType!Range == string ) )
{
	auto nmd = input.front.split.to!( long[] );
	return tuple( nmd[ 0 ], nmd[ 1 ], nmd[ 2 ] );
}

auto solve( long n, long m, long d )
{
	// 隣り合う2項の美しさの期待値を計算
	auto ans = 0.0L;
	if( d == 0 ) ans = cast( real ) n / n ^^ 2;					// 全n^^2通りのうち、美しさがdのものはn通り
	else         ans = cast( real ) 2 * ( n - d ) / n ^^ 2;		// 全n^^2通りのうち、美しさがdのものは2(n-d)通り
	
	// 隣り合うm-1項に拡張
	ans *= m - 1;
	
	return format( "%0.6f", ans );
}
