disable broken tests on net_4_0
[mcs.git] / docs / ecma334 / 14.7.3.xml
blob74ddb00ac2c1de911ed234acf2c35bfd6be7793a
1 <?xml version="1.0"?>
2 <clause number="14.7.3" title="Remainder operator">
3   <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>
4   <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[
5 int operator %(int x, int y);  
6 uint operator %(uint x, uint y);  
7 long operator %(long x, long y);  
8 ulong operator %(ulong x, ulong y);  
9 ]]></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[
10 float operator %(float x, float y);  
11 double operator %(double x, double y);  
12 ]]></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>
13 <table_line>+x +z +z NaN NaN x x NaN </table_line>
14 <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>
15 <table_line>+0 +0 +0 NaN NaN +0 +0 NaN </table_line>
16 <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>
17 <table_line>+<infinity/> NaN NaN NaN NaN NaN NaN NaN </table_line>
18 <table_line><unicode>150</unicode><infinity/> NaN NaN NaN NaN NaN NaN NaN </table_line>
19 <table_line>NaN NaN NaN NaN NaN NaN NaN NaN </table_line>
20 </list_item><list_item> Decimal remainder: <code_example><![CDATA[
21 decimal operator %(decimal x, decimal y);  
22 ]]></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>
23 </clause>