.NET 4.0 Beta2中的BigInteger和Complex类

.NET4.0 Beta2中提供了新的System.Numerics命名空间,对应于System.Numerics.dll。该命名空间下就两个类BigInteger和Complex,我们来简单了解下
这两个类的用法。

BigInteger:任意大小的带符号整数

1.Int64, SByte, UInt16, UInt32, and UInt64这些5.495.html">都有一个MinValue和MaxValue属性。而BigInteger没有这两个属性,因为它没有大小限制。
2.不可变的类型.
3.由于他没有大小限制,理论上当它足够大的时候会出现OutOfMemoryException异常.

BigInteger初始化

1.我们可以使用已有的数据类型来初始化BigInteger,如下:

BigInteger bigIntFromDouble = new BigInteger(179032.6541);//会截取小点前的

BigInteger bigIntFromInt64 = new BigInteger(934157136952);

2.我们也可以使用超出现有数据类型范围的方式来得到BigInteger:

byte[] bytes = { 5, 4, 3, 2, 1 };

BigInteger number = new BigInteger(bytes);

Console.WriteLine("The value of number is {0} (or 0x{0:x}).", number);

//The value of number is 4328719365 (or 0x102030405).

字节数组的第一个元素为16进制的最低位,依次升高.

3.可以使用Parse或 TryParse方法将string的实例化为BigInteger:

string positiveString = "9138968124799367125543
2112000000";

string negativeString = "-90315837410896312071002088037140000";

BigInteger posBigInt = 0;

BigInteger negBigInt = 0;

posBigInt = BigInteger.Parse(positiveString);

Console.WriteLine(posBigInt);

BigInteger.TryParse(negativeString, out negBigInt);

Console.WriteLine(negBigInt);

4. 还可以使用静态方法Pow如下:

BigInteger number = BigInteger.Pow(Int64.MaxValue, 3);

BigInteger支持所有的数学运算,我们可以完全象使用其他整数类型一样使用BigInteger

Complex复数类

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.Magnitude);

Console.WriteLine("Phase of z2 = " + z2.Phase);

2.我们可以使用一个ComplexFormatter类来辅助我们做格式化输出,如下:

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.使用如下:

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));

时间: 2024-09-23 12:18:01

.NET 4.0 Beta2中的BigInteger和Complex类的相关文章

艾伟_转载:.NET 4.0 Beta2中的BigInteger和Complex类

.NET4.0 Beta2中提供了新的System.Numerics命名空间,对应于System.Numerics.dll.该命名空间下就两个类BigInteger和Complex,我们来简单了解下这两个类的用法. BigInteger:任意大小的带符号整数 1.Int64, SByte, UInt16, UInt32, and UInt64这些都有一个MinValue和MaxValue属性.而BigInteger没有这两个属性,因为它没有大小限制.2.不可变的类型.3.由于他没有大小限制,理论

ASP.NET 2.0 Beta2 中特殊文件夹名称的改变

asp.net 微软的Web平台开发组最近发布了一个新消息,据称在Visual Studio 2005 Beta2中,ASP.NET2.0中的一些特殊文件夹的名称将有所改变.这些改变主要是为了避免和应用程序命名的不协调,以及在进行XCopy部署时保护相关系统资料. ASP.NET 2.0 (Beta2)中最新的特殊文件夹的名称改变如下: /Bin 改变为 /Application_Assemblies * /Code 改变为 /Application_Code /Resources 改变为 /A

贴篇文章,BETA2中ACCESS操作数据库

access|数据|数据库 朋友们好,回家已经有10天了,总算是开始学.NET了,直接的感觉就是MS的帮助太差了,好多错误在上面,害的我走了好多弯路,结果好多东西还没有完全搞好,简直了!由于BETA2和BETA1比较,变化太大了,而现在无论是书还是网络上的资料基本都还停留在BETA1上,是朋友们在学习的时候遇到好多问题还无处可查,这里我把我的学习过程中遇到的一些问题和体会拿出来与大家分享,希望能给也在学习过程中的朋友有些帮助! 我估计,朋友们在学习.NET的过程中,遇到的最多的问题就是在和数据库

Java中的BigInteger

复制的API上的文档,BigInteger对付一般的高精度没有问题. java.math 类 BigInteger java.lang.Object java.lang.Number java.math.BigInteger 所有已实现的接口: Serializable, Comparable<BigInteger> public class BigInteger extends Number implements Comparable<BigInteger> 不可变的任意精度的整

ASP.NET2.0应用中定制安全凭证之理论篇

asp.net|安全 阅读提要 在缺省状况下,你只能使用Visual Studio 2005的一个本机实例来管理与ASP.NET 2.0一同发行的SQL Server数据库中的安全凭证.本文将向你展示怎样用一个Web服务来包装ASP.NET 2.0提供者并通过使用一个Windows表单应用程序来管理凭证存储从而扩展这种管理能力. 如今,无论是互联网还是企业内部局域网程序一般都要求使用定制的方式来存储和管理用户帐户和角色.为此,ASP.NET 2.0提供了一个现成的提供者模型和一个SQL Seve

原来Eclipse3.0.1中的jboss32x.server文件不匹配JBoss3.2.6!郁闷~

server 从今天下午开始就一直在Eclipse中配置JBoss,由于原来用的是JBoss3.0.0,现在想用JBoss3.2.6. 于是就重新配置.但是配置好了以后,却发现会报告jar文件路径出错,一共有两个:一个是jboss-3.2.6\lib\jboss-boot.jar找不到,一个是jboss-3.2.6 erver\default\lib\javax-servlet.jar找不到. 用UE32打开eclipse\plugins\com.objectlearn.jdt.j2ee_3.0

ASP.NET 2.0 AJAX中Webservice调用方法示例

ajax|asp.net|web|示例 ASP.NET 2.0 AJAX中能够在客户端js中很方便地调用服务器Webservice,以下为一些调用的示例.笔者安装的ASP.NET 2.0 AJAX 版本为AJAX November CTP. 三个示例分别为:1 带参数的WS方法2 不带参数的WS方法3 参数类型为DataTable的WS方法 一.WebMethod注意要点:1 WebMethod类需要添加命名空间 Microsoft.Web.Script.Services,此空间需要引用Micr

Oracle 10g(10.1.0.2)中的OPTIMIZER

oracle Oracle 10g(10.1.0.2)中的OPTIMIZER_INDEX_COST_ADJ Tom Kyte的新书Effective Oracle by Design的第6章 Getting the Most Out of the Cost-Based Optimizer中介绍了参数OPTIMIZER_INDEX_COST_ADJ,并认为可以理解为Oracle执行多块(MultiBlock)I/O(比如全表扫描)的代价与执行单块(Single-block)I/O代价的相对比例.T

使用.net framework中常用类在2.0版中的新功能

在上一篇<浏览.NET Framework 2.0 类型库中新增的常用功能>一文中我主要列了几个新增的常用主件,本文作为小结主要针对一些常用类的扩展来讲最近在使用C# 2.0 的时候发现的几个新特征,讲得不当之处请网友指正. 1.Exception异常基类在2.0下,Exception基类增加了Data属性,原型如下,public virtual IDictionary Data {get;}可见其实现了IDictionary接口,用来存储异常的自定义信息,由此想到在ExceptionMana