. Net4.0 beta2 provides the new system. numerics namespace, which corresponds to system. numerics. dll. The namespace contains two classes: biginteger and complex.
The usage of these two classes.
Biginteger: A signed integer of any size.
1. int64, sbyte, uint16, uint32, and uint64 all have a minvalue and maxvalue attribute. Biginteger does not have these two attributes because it has no size limit.
2. unchangeable type.
3. Because he does not have the size limit, in theory, when it is large enough, an outofmemoryexception will occur.
Biginteger Initialization
1. You can use an existing data type to initialize biginteger as follows:
BigintegerBigintfromdouble =NewBiginteger(179032.6541); // CapturesBigintegerBigintfromint64 =NewBiginteger(934157136952);
2. We can also use a method that exceeds the range of existing data types to obtain biginteger:
Byte[] Bytes = {5,4,3,2,1};BigintegerNumber =NewBiginteger(Bytes );Console. Writeline ("The value of number is {0} (or 0x {0: x }).", Number );// The value of number is 4328719365 (or 0x102030405 ).The first element of the byte array is a hexadecimal percentile, which increases sequentially.
3. You can use the parse or tryparse method to instantiate a string as biginteger:
StringPositivestring ="91389681247993671255432112000000";StringNegativestring ="-90315837410896312071002088037140000";BigintegerPosbigint =0;BigintegerNegbigint =0; Posbigint =Biginteger. Parse (positivestring );Console. Writeline (posbigint );Biginteger. Tryparse (negativestring,OutNegbigint );Console. Writeline (negbigint );
4. You can also use the static POW method as follows:
BigintegerNumber =Biginteger. Pow (Int64. Maxvalue,3);
Biginteger supports all mathematical operations. We can use biginteger exactly like other integer types.
Complex plural class
1. var Z1 = New Complex (); // This creates complex zero (0, 0) VaR Z2 = New Complex ( 2 , 4 ); VaR Z3 = New Complex ( 3 , 5 ); Console . Writeline ( "Complex zero :" + Z1 ); Console . Writeline (Z2 + "+" + Z3 + "=" + (Z2 + Z3 )); Console . Writeline ( "| Z2 | =" + Z2.magn.pdf );Console . Writeline ( "Phase of Z2 =" + Z2.phase );
2. We can useComplexformatterClass to help us format the output, as shown below:
Using System; Using System. numerics; Public class Complexformatter : Iformatprovider , Icustomformatter { Public object Getformat ( Type Formattype ){If (Formattype = Typeof ( Icustomformatter )) Return this ; Else return null ;} Public String Format ( String Format, Object Arg, Iformatprovider Provider ){ If (ARG Is Complex ){Complex C1 = ( Complex ) ARG; // Check if the format string has a precision specifier. Int Precision; String Fmtstring = String . Empty; If (Format. length> 1 ){ Try {Precision = Int32 . Parse (format. substring ( 1 ));}Catch ( Formatexception ) {Precision = 0 ;} Fmtstring = "N" + Precision. tostring ();} If (Format. substring ( 0 , 1 ). Equals ( "I" , Stringcomparison . Ordinalignorecase )) Return C1.real. tostring ( "N2" ) +"+" + C1.imaginary. tostring ( "N2" ) + "I" ; Else if (Format. substring ( 0 , 1 ). Equals ( "J" , Stringcomparison . Ordinalignorecase )) Return C1.real. tostring ( "N2" ) + "+" + C1.imaginary. tostring ( "N2" ) +"J" ; Else return C1.tostring (format, provider );} Else { If (ARG Is Iformattable ) Return (( Iformattable ) Arg). tostring (format, provider ); Else if (Arg! = Null ) Return Arg. tostring ();Else return String . Empty ;}}3. Use the following:
Complex C1 = New Complex ( 12.1 , 15.4 ); Console . Writeline ( "Formatting with tostring ():" + C1.tostring ()); Console . Writeline ( "Formatting with tostring (Format ):" + C1.tostring ( "N2" ));Console . Writeline ( "Custom formatting with I0 :" + String . Format ( New Complexformatter (), "{0: I0 }" , C1 )); Console . Writeline ( "Custom formatting with J3 :" + String . Format ( New Complexformatter (), "{0: J3 }" , C1 ));