zoukankan      html  css  js  c++  java
  • .NET 4.0 Beta2中的BigInteger和Complex类(转)

    等了八年,终于出来了。要是再加上矩阵Matrix类,就更好了。

    在此基础上,就可以开发几何,代数,高数,数理统计等常用的数学库。

    希望有人能把R转成.net版本!!!

    以下转自 http://www.cnblogs.com/carysun/archive/2009/10/25/Numerics-BigIntegerComplex.html

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

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

    1.Int64, SByte, UInt16, UInt32, and UInt64这些都有一个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.可以使用ParseTryParse方法将string的实例化为BigInteger:

    string positiveString = "91389681247993671255432112000000";
    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));
    
  • 相关阅读:
    解决:Could not resolve archetype org.apache.maven.archetypes
    Spring MVC配置MyBatis输出SQL
    Spring集成MyBatis 通用Mapper以及 pagehelper分页插件
    关于SpringMVC或Struts2接受参数接收不到的原因
    配置quartz启动时就执行一次
    ajaxFileUpload进行文件上传时,总是进入error
    spring mvc注入配置文件里的属性
    java中将一个文件夹下所有的文件压缩成一个文件
    flume failed to start agent because dependencies were not found in classpath
    ubuntu不能安装pip unable to install pip in unbuntu
  • 原文地址:https://www.cnblogs.com/xiexiaokui/p/1589538.html
Copyright © 2011-2022 走看看