<?xml version="1.0"?> <clause number="14.7.3" title="Remainder operator"> <paragraph>For an operation of the form x % y, binary operator overload resolution (<hyperlink>14.2.4</hyperlink>) is applied to select a specific operator implementation. The operands are converted to the parameter types of the selected operator, and the type of the result is the return type of the operator. </paragraph> <paragraph>The predefined remainder operators are listed below. The operators all compute the remainder of the division between x and y. <list><list_item> Integer remainder: <code_example><![CDATA[ int operator %(int x, int y); uint operator %(uint x, uint y); long operator %(long x, long y); ulong operator %(ulong x, ulong y); ]]></code_example>The result of x % y is the value produced by x -(x / y) * y. If y is zero, a System.DivideByZeroException is thrown. The remainder operator never causes an overflow. </list_item><list_item> Floating-point remainder: <code_example><![CDATA[ float operator %(float x, float y); double operator %(double x, double y); ]]></code_example>The following table lists the results of all possible combinations of nonzero finite values, zeros, infinities, and NaN's. In the table, x and y are positive finite values. z is the result of x % y and is computed as x -n * y, where n is the largest possible integer that is less than or equal to x / y. This method of computing the remainder is analogous to that used for integer operands, but differs from the IEEE 754 definition (in which n is the integer closest to x / y). <table_line>+y <unicode>150</unicode>y +0 <unicode>150</unicode>0 +<infinity/> <unicode>150</unicode><infinity/> NaN </table_line> <table_line>+x +z +z NaN NaN x x NaN </table_line> <table_line><unicode>150</unicode>x <unicode>150</unicode>z <unicode>150</unicode>z NaN NaN <unicode>150</unicode>x <unicode>150</unicode>x NaN </table_line> <table_line>+0 +0 +0 NaN NaN +0 +0 NaN </table_line> <table_line><unicode>150</unicode>0 <unicode>150</unicode>0 <unicode>150</unicode>0 NaN NaN <unicode>150</unicode>0 <unicode>150</unicode>0 NaN </table_line> <table_line>+<infinity/> NaN NaN NaN NaN NaN NaN NaN </table_line> <table_line><unicode>150</unicode><infinity/> NaN NaN NaN NaN NaN NaN NaN </table_line> <table_line>NaN NaN NaN NaN NaN NaN NaN NaN </table_line> </list_item><list_item> Decimal remainder: <code_example><![CDATA[ decimal operator %(decimal x, decimal y); ]]></code_example>If the value of the right operand is zero, a System.DivideByZeroException is thrown. If the resulting value is too large to represent in the <keyword>decimal</keyword> format, a System.OverflowException is thrown. If the result value is too small to represent in the <keyword>decimal</keyword> format, the result is zero. The scale of the result, before any rounding, is the same as the scale of y, and the sign of the result, if non-zero, is the same as that of x. Decimal remainder is equivalent to using the remainder operator of type System.Decimal. </list_item></list></paragraph> </clause>