Faster(?) factorial calculations
\$0! = 1\$, which is a case not handled by the code.

The method should throw an ArgumentOutOfRangeException if n is negative.

You could also replace this


if (n % 2 != 0)
    result *= (BigInteger)Math.Round((double)n / 2, MidpointRounding.AwayFromZero);



with this

if (n % 2 != 0)
    result *= n / 2 + 1;


if you find it clearer.