Last Updated :
10 Dec, 2018
Suppose n and p are unsigned int variables in a C program. We wish to set p to nC3. If n is large, which of the following statements is most likely to set p correctly?
(A) p = n * (n-1) * (n-2) / 6;
(B) p = n * (n-1) / 2 * (n-2) / 3;
(C) p = n * (n-1) / 3 * (n-2) / 2;
(D) p = n * (n-1) * (n-2) / 6.0;
Answer: (B)
Explanation: As n is large, the product n*(n-1)*(n-2) will go out of the range(overflow) and it will return a value different from what is expected. Therefore, option (A) and (D) are eliminated.
So we consider a shorter product n*(n-1).
n*(n-1) is always an even number. So the subexpression \” n * (n-1) / 2 \” in option B would always produce an integer, which means no precision loss in this subexpression. And when we consider \” n*(n-1)/2*(n-2) \”, it will always give a number which is a multiple of 3. So dividing it with 3 won\’t have any loss.
Quiz of this Question
Share your thoughts in the comments
Please Login to comment...