2012-01-03T14:46:51の更新内容

programming/netfx/mathematics/0_math/index.wiki.txt

current previous
19,107 19,24
 

        

        
 
|*Mathクラスのメソッドと数学関数の対応
|*Mathクラスのメソッドと数学関数の対応
 
|~関数|~対応するMathクラスのメソッド|~解説へのリンク|h
|~関数|~対応するMathクラスのメソッド|~解説へのリンク|h
~
|絶対値 |&var{x};||Math.Abs(x)|[[解説へ>#FuncAbsSign]]|
|絶対値 |&italic{x};||Math.Abs(x)|[[解説へ>#FuncAbsSign]]|
~
|符号関数 sgn &var{x};|Math.Sign(x)|[[解説へ>#FuncAbsSign]]|
|符号関数 sgn &italic{x};|Math.Sign(x)|[[解説へ>#FuncAbsSign]]|
~
|最大 max(&var{x};, &var{y};)|Math.Max(x, y)|[[解説へ>#FuncMinMax]]|
|最大 max(&italic{x};, &italic{y};)|Math.Max(x, y)|[[解説へ>#FuncMinMax]]|
~
|最小 min(&var{x};, &var{y};)|Math.Min(x, y)|[[解説へ>#FuncMinMax]]|
|最小 min(&italic{x};, &italic{y};)|Math.Min(x, y)|[[解説へ>#FuncMinMax]]|
~
|天井関数 ⌈&var{x};⌉|Math.Ceiling(x)|[[解説へ>#FuncRound]]|
|天井関数 ⌈&italic{x};⌉|Math.Ceiling(x)|[[解説へ>#FuncRound]]|
~
|床関数 ⌊&var{x};⌋|Math.Floor(x)|[[解説へ>#FuncRound]]|
|床関数 ⌊&italic{x};⌋|Math.Floor(x)|[[解説へ>#FuncRound]]|
~
|累乗 &var{x};&sup{&var{y};};|Math.Pow(x, y)|[[解説へ>#FuncPower]]|
|累乗 &italic{x};&sup{&italic{y};};|Math.Pow(x, y)|[[解説へ>#FuncPower]]|
~
|ネイピア数の累乗 &italic{e};&sup{&var{x};};|Math.Exp(x)|[[解説へ>#FuncPower]]|
|ネイピア数の累乗 &italic{e};&sup{&italic{x};};|Math.Exp(x)|[[解説へ>#FuncPower]]|
~
|平方根 √&var{x};|Math.Sqrt(x)|[[解説へ>#FuncPower]]|
|平方根 √&italic{x};|Math.Sqrt(x)|[[解説へ>#FuncPower]]|
~
|累乗根 &sup{&var{n};};√&var{x};|Math.Pow(x, 1.0 / n)|[[解説へ>#FuncPower]]|
|累乗根 &sup{&italic{n};};√&italic{x};|Math.Pow(x, 1.0 / n)|[[解説へ>#FuncPower]]|
~
|自然対数 ln &var{x};|Math.Log(x)|[[解説へ>#FuncLogarithmic]]|
|自然対数 ln &italic{x};|Math.Log(x)|[[解説へ>#FuncLogarithmic]]|
~
|常用対数 log&sub{10}; &var{x};|Math.Log10(x)|[[解説へ>#FuncLogarithmic]]|
|常用対数 log&sub{10}; &italic{x};|Math.Log10(x)|[[解説へ>#FuncLogarithmic]]|
~
|対数 log&sub{a}; &var{x};|Math.Log(x, a)|[[解説へ>#FuncLogarithmic]]|
|対数 log&sub{a}; &italic{x};|Math.Log(x, a)|[[解説へ>#FuncLogarithmic]]|
~
|三角関数 sin &var{x};, cos &var{x};, tan &var{x};|Math.Sin(x), Math.Cos(x), Math.Tan(x)|[[解説へ>#FuncTrigonometric]]|
|三角関数 sin &italic{x};, cos &italic{x};, tan &italic{x};|Math.Sin(x), Math.Cos(x), Math.Tan(x)|[[解説へ>#FuncTrigonometric]]|
~
|逆正接 tan&sup{-1}; (&var{y};/&var{x};)&br;直交座標(&var{x};, &var{y};)の偏角|Math.Atan2(y, x)|[[解説へ>#FuncTrigonometric]]|
|逆三角関数 sin&sup{-1}; &italic{x};, cos&sup{-1}; &italic{x};, tan&sup{-1}; &italic{x};|Math.Asin(x), Math.Acos(x), Math.Atan(x)|[[解説へ>#FuncTrigonometric]]|
~
|逆三角関数 sin&sup{-1}; &var{x};, cos&sup{-1}; &var{x};, tan&sup{-1}; &var{x};|Math.Asin(x), Math.Acos(x), Math.Atan(x)|[[解説へ>#FuncTrigonometric]]|
|双曲線関数 sinh &italic{x};, cosh &italic{x};, tanh &italic{x};|Math.Sinh(x), Math.Cosh(x), Math.Tanh(x)|[[解説へ>#FuncTrigonometric]]|
+
|双曲線関数 sinh &var{x};, cosh &var{x};, tanh &var{x};|Math.Sinh(x), Math.Cosh(x), Math.Tanh(x)|[[解説へ>#FuncTrigonometric]]|
 
|~関数|~対応するMathクラスのメソッド|~解説へのリンク|f
|~関数|~対応するMathクラスのメソッド|~解説へのリンク|f
 

        

        
+
*メソッドの呼び出し
+
Mathクラスで提供される数学関数はいずれも静的メソッドとなっているため、他の静的メソッドと同様に&var{クラス名};.&var{メソッド};(&var{引数};)の形式で呼び出します。
+

          
+
#tabpage(C#)
+
#code(cs){{
+
using System;
+

          
+
class Sample {
+
  static void Main()
+
  {
+
    // 3の平方根を求める
+
    double val = Math.Sqrt(3);
+

          
+
    Console.WriteLine(val);
+
  }
+
}
+
}}
+
#tabpage(VB)
+
#code(vb){{
+
Imports System
+

          
+
Class Sample
+
  Shared Sub Main()
+
    ' 3の平方根を求める
+
    Dim val As Double = Math.Sqrt(3)
+

          
+
    Console.WriteLine(val)
+
  End Sub
+
End Class
+
}}
+
#tabpage-end
+

          
+
VBではImportsステートメントにクラス名を指定することで、クラス名を省略してメソッドを呼び出すことが出来るようになります。 これを使うことで、次の例のようにメソッド呼び出しの記述からMathクラスを省略することが出来ます。
+

          
+
#code(vb,Mathクラスのメンバをインポートする例){{
+
Imports System
+
Imports System.Math ' Mathクラスのメンバをインポート
+

          
+
Class Sample
+
  Shared Sub Main()
+
    Dim val As Double = Sqrt(3) ' クラス名を省略して呼び出す
+

          
+
    Console.WriteLine(val)
+
  End Sub
+
End Class
+
}}
+

          
+
C#では、usingディレクティブは名前空間のみに使用できるので、上記の例のようなクラス名の省略は出来ません。 一方、エイリアス(別名)を付けることでより短い記述にすることは可能です。
+

          
+
#code(cs,usingディレクティブでエイリアスを付けて呼び出す例){{
+
using System;
+
// using System.Math; // usingディレクティブは型名には使用できず、名前空間に対してのみ使用できる
+
using M = System.Math; // usingディレクティブで型のエイリアス(別名)を付けることは可能
+

          
+
class Sample {
+
  static void Main()
+
  {
+
    double val = M.Sqrt(3); // エイリアスを使って呼び出し
+

          
+
    Console.WriteLine(val);
+
  }
+
}
+
}}
+

          
+
VBのImportsステートメントでも同様にエイリアスを付けることが出来ます。
+

          
+
さらに、Mathクラスのメソッド名はすべてPascal形式(大文字から始まる)となっているので、C#のように大文字・小文字の違いを意識する言語では、呼び出すメソッド名をすべて小文字にするとコンパイルエラーとなる点に注意が必要です。
+

          
+
#code(cs,メソッド名を誤って小文字にした場合){{
+
using System;
+

          
+
class Sample {
+
  static void Main()
+
  {
+
    double val = Math.sqrt(3); // CS0117: `System.Math' に `sqrt' の定義がありません。
+

          
+
    Console.WriteLine(val);
+
  }
+
}
+
}}
+

          
+

          
 

        

        
 
*絶対値・符号 (Abs, Sign) [#FuncAbsSign]
*絶対値・符号 (Abs, Sign) [#FuncAbsSign]
 
絶対値を求めるには&msdn(netfx,member,System.Math.Abs){Absメソッド};、値の符号(正負)を求めるには&msdn(netfx,member,System.Math.Sign){Signメソッド};を使用します。 Absメソッド・Signメソッドともに戻り値は引数と同じ型になります。 Signメソッドでは、引数の値が正の場合は+1、負の場合は-1、0の場合は0が返されます。
絶対値を求めるには&msdn(netfx,member,System.Math.Abs){Absメソッド};、値の符号(正負)を求めるには&msdn(netfx,member,System.Math.Sign){Signメソッド};を使用します。 Absメソッド・Signメソッドともに戻り値は引数と同じ型になります。 Signメソッドでは、引数の値が正の場合は+1、負の場合は-1、0の場合は0が返されます。
917,7 834,7
 
    Console.WriteLine();
    Console.WriteLine();
 

        

        
 
    double degree = 45.0;
    double degree = 45.0;
~
    double radian = Math.PI * degree / 180.0; // 度数法(度)から弧度法(ラジアン)に変換
    double radian = Math.PI * degree / 180.0;
 

        

        
 
    Console.WriteLine("Sin({0}°) = {1}", degree, Math.Sin(radian));
    Console.WriteLine("Sin({0}°) = {1}", degree, Math.Sin(radian));
 
    Console.WriteLine("Cos({0}°) = {1}", degree, Math.Cos(radian));
    Console.WriteLine("Cos({0}°) = {1}", degree, Math.Cos(radian));
937,7 854,7
 
    Console.WriteLine()
    Console.WriteLine()
 

        

        
 
    Dim degree As Double = 45.0
    Dim degree As Double = 45.0
~
    Dim radian As Double = Math.PI * degree / 180.0 ' 度数法(度)から弧度法(ラジアン)に変換
    Dim radian As Double = Math.PI * degree / 180.0
 

        

        
 
    Console.WriteLine("Sin({0}°) = {1}", degree, Math.Sin(radian))
    Console.WriteLine("Sin({0}°) = {1}", degree, Math.Sin(radian))
 
    Console.WriteLine("Cos({0}°) = {1}", degree, Math.Cos(radian))
    Console.WriteLine("Cos({0}°) = {1}", degree, Math.Cos(radian))

programming/netfx/basictypes/index.wiki.txt

current previous
269,184 269,6
 

        

        
 

        

        
 

        

        
+
*型のデフォルト値
+
それぞれの型のデフォルト値をまとめると次の表のようになります。
+

          
+
|*型とデフォルト値
+
|~型|~デフォルト値|h
+
|>|~整数型|
+
|&msdn(netfx,type,System.SByte);&br;(sbyte, SByte)|0|
+
|&msdn(netfx,type,System.Int16);&br;(short, Short)|0|
+
|&msdn(netfx,type,System.Int32);&br;(int, Integer)|0|
+
|&msdn(netfx,type,System.Int64);&br;(long, Long)|0|
+
|&msdn(netfx,type,System.Byte);&br;(byte, Byte)|0|
+
|&msdn(netfx,type,System.UInt16);&br;(ushort, UShort)|0|
+
|&msdn(netfx,type,System.UInt32);&br;(uint, UInteger)|0|
+
|&msdn(netfx,type,System.UInt64);&br;(ulong, ULong)|0|
+
|>|~実数型|
+
|&msdn(netfx,type,System.Single);&br;(float, Single)|0|
+
|&msdn(netfx,type,System.Double);&br;(double, Double)|0|
+
|&msdn(netfx,type,System.Decimal);&br;(decimal, Decimal)|0|
+
|>|~その他の数値型|
+
|&msdn(netfx,type,System.IntPtr);|0&br;(IntPtr.Zero)|
+
|&msdn(netfx,type,System.UIntPtr);|0&br;(UIntPtr.Zero)|
+
|&msdn(netfx,type,System.Numerics.dll,System.Numerics.BigInteger);|0&br;(BigInteger.Zero)|
+
|&msdn(netfx,type,System.Numerics.dll,System.Numerics.Complex);|0&br;(Complex.Zero)|
+
|>|~文字と文字列の型|
+
|&msdn(netfx,type,System.Char);&br;(char, Char)|0&br;(Char.MinValue, '\x0', U+0000)|
+
|&msdn(netfx,type,System.String);&br;(string, String)|null/Nothing|
+
|>|~日付と時刻の型|
+
|&msdn(netfx,type,System.DateTime);|0001/01/01 0:00:00&br;(DateTime.MinValue)|
+
|&msdn(netfx,type,System.DateTimeOffset);|0001/01/01 0:00:00 +00:00&br;(DateTimeOffset.MinValue)|
+
|&msdn(netfx,type,System.TimeSpan);|00:00:00&br;(TimeSpan.Zero)|
+
|>|~その他の型|
+
|&msdn(netfx,type,System.Object);およびすべての参照型&br;(object, Object)|null/Nothing|
+
|&msdn(netfx,type,System.Boolean);&br;(bool, Boolean)|false/False|
+
|&msdn(netfx,type,System.Nullable);など&br;(int?, Integer?など)|null/Nothing|
+
|~型|~デフォルト値|f
+

          
+
これらのデフォルト値は、ローカル変数やフィールドに初期値を指定しなかった場合の値や、配列なら各要素の初期値、&msdn(netfx,member,System.Array.Clear){Array.Clearメソッド};で配列内を初期化した時の値などと同じ値なります。
+

          
+
**デフォルト値の取得
+
C#では、&msdn(netfx,id,xwth0h0d){defaultキーワード};を使うことで値型・参照型問わず、任意の型でそのデフォルト値を取得することが出来ます。 VBではこのようなキーワードは用意されていませんが、代わりに&msdn(netfx,id,0x9tb07z){Nothing};を使うことが出来ます。 Nothingは参照型のほか、値型にも使うことが出来、値型の場合はデフォルト値を表すものとなります。
+

          
+
#tabpage(C#)
+
#code(cs){{
+
using System;
+

          
+
class Sample {
+
  static void Main()
+
  {
+
    int i = default(int); // intのデフォルト値
+
    bool b = default(bool); // boolのデフォルト値
+
    string s = default(string); // stringのデフォルト値
+
    DateTime dtm = default(DateTime); // DateTimeのデフォルト値
+
    Point p = default(Point); // 独自に定義した構造体Pointのデフォルト値
+

          
+
    Console.WriteLine("default(int) = {0}", i);
+
    Console.WriteLine("default(bool) = {0}", b);
+
    Console.WriteLine("default(string) = {0}, null? = {1}", s, s == null);
+
    Console.WriteLine("default(DateTime) = {0}", dtm);
+
    Console.WriteLine("default(Point) = {0}", p);
+
  }
+
}
+

          
+
struct Point {
+
  public Point(int x, int y)
+
  {
+
    this.x = x;
+
    this.y = y;
+
  }
+

          
+
  public override string ToString()
+
  {
+
    return string.Format("({0}, {1})", x, y);
+
  }
+

          
+
  private int x, y;
+
}
+
}}
+

          
+
#prompt(実行結果){{
+
default(int) = 0
+
default(bool) = False
+
default(string) = , null? = True
+
default(DateTime) = 0001/01/01 0:00:00
+
default(Point) = (0, 0)
+
}}
+
#tabpage(VB)
+
#code(vb){{
+
Imports System
+

          
+
Class Sample
+
  Shared Sub Main()
+
    Dim i As Integer = Nothing ' Integerのデフォルト値
+
    Dim b As Boolean = Nothing ' Booleanのデフォルト値
+
    Dim s As String = Nothing ' Stringのデフォルト値
+
    Dim dtm As Date = Nothing ' Dateのデフォルト値
+
    Dim p As Point = Nothing ' 独自に定義した構造体Pointのデフォルト値
+

          
+
    Console.WriteLine("default(Integer) = {0}", i)
+
    Console.WriteLine("default(Boolean) = {0}", b)
+
    Console.WriteLine("default(String) = {0}, Is Nothing? = {1}", s, s Is Nothing)
+
    Console.WriteLine("default(Date) = {0}", dtm)
+
    Console.WriteLine("default(Point) = {0}", p)
+
  End Sub
+
End Class
+

          
+
Structure Point
+
  Public Sub New(ByVal x As Integer, ByVal y As Integer)
+
    Me.x = x
+
    Me.y = y
+
  End Sub
+

          
+
  Public Overrides Function ToString() As String
+
    Return String.Format("({0}, {1})", x, y)
+
  End Function
+

          
+
  Private x, y As Integer
+
End Structure
+
}}
+

          
+
#prompt(実行結果){{
+
default(Integer) = 0
+
default(Boolean) = False
+
default(String) = , Is Nothing? = True
+
default(Date) = 0001/01/01 0:00:00
+
default(Point) = (0, 0)
+
}}
+
#tabpage-end
+

          
+
これはジェネリックなクラス・メソッドで特に役に立つもので、デフォルト値を返したい場合に数値型なら0、参照型ならnullといった面倒な場合分けをする必要が無くなります。 次の例は、Array.Clearメソッドと同様に配列内の各要素を初期化するジェネリックメソッドの例です。 default/Nothingで型に応じた初期値を代入することで各要素の初期化を行っています。
+

          
+
#tabpage(C#)
+
#code(cs){{
+
using System;
+

          
+
class Sample {
+
  // 配列の内容をクリアする
+
  static void Clear<T>(T[] arr)
+
  {
+
    for (int i = 0; i < arr.Length; i++) {
+
      arr[i] = default(T); // 型Tのデフォルト値を格納する
+
    }
+
  }
+

          
+
  static void Main()
+
  {
+
    int[] intArray = new int[10];
+
    string[] strArray = new string[10];
+

          
+
    Clear(intArray);
+
    Clear(strArray);
+
  }
+
}
+
}}
+
#tabpage(VB)
+
#code(vb){{
+
Imports System
+

          
+
Class Sample
+
  ' 配列の内容をクリアする
+
  Shared Sub Clear(Of T)(ByVal arr As T())
+
    For i As Integer = 0 To arr.Length - 1
+
      arr(i) = Nothing ' 型Tのデフォルト値を格納する
+
    Next
+
  End Sub
+

          
+
  Shared Sub Main()
+
    Dim intArray(9) As Integer
+
    Dim strArray(9) As String
+

          
+
    Clear(Of Integer)(intArray)
+
    Clear(Of String)(strArray)
+
  End Sub
+
End Class
+
}}
+
#tabpage-end
+

          
+

          
+

          
 
*リテラルとサフィックス
*リテラルとサフィックス
 
数値および文字列のリテラル(値をそのまま記述したもの)にサフィックスを付けることで、リテラルの型を明示的に指定することが出来ます。 また、VBではサフィックスの他にも型文字と呼ばれる記号を付けることでも型を指定することが出来ます。 なお、以下の表中では明記していませんが、VBでもサフィックスを小文字で指定できます。
数値および文字列のリテラル(値をそのまま記述したもの)にサフィックスを付けることで、リテラルの型を明示的に指定することが出来ます。 また、VBではサフィックスの他にも型文字と呼ばれる記号を付けることでも型を指定することが出来ます。 なお、以下の表中では明記していませんが、VBでもサフィックスを小文字で指定できます。
 

        

        

programming/vb.net/basics/07_procedure/index.wiki.txt

current previous
429,19 429,4
 

        

        
 
プロシージャをオーバーロードする場合、当然プロシージャ名は同じでなければなりません。 また、引数の数・順序・型が一つでも異なっていないとオーバーロードすることはできません。 つまり''戻り値の型や引数の名前の違いだけではオーバーロードできません''。 ちなみに、プロシージャの名前と引数の数・順序・型の要素をまとめてシグネチャ(もしくはシグニチャ、signature)といいます。
プロシージャをオーバーロードする場合、当然プロシージャ名は同じでなければなりません。 また、引数の数・順序・型が一つでも異なっていないとオーバーロードすることはできません。 つまり''戻り値の型や引数の名前の違いだけではオーバーロードできません''。 ちなみに、プロシージャの名前と引数の数・順序・型の要素をまとめてシグネチャ(もしくはシグニチャ、signature)といいます。
 

        

        
+
*外部DLL、Win32 APIの呼び出し
+
VB6以前では、Declareステートメントを使って外部DLLやWin32 APIを呼び出すためのプロシージャを宣言することが出来ました。 VB.NETでも引き続きDeclareステートメントを使うことが出来ますが、これとは別に&msdn(netfx,type,System.Runtime.InteropServices.DllImportAttribute){DllImport属性};を使うことでも外部DLLの関数を呼び出すためのプロシージャを宣言することが出来ます。 次の例では、いずれもWin32 APIのLockWorkStation関数を呼び出すためのプロシージャを宣言しています。
+

          
+
#code(vb,Declareステートメントを使った例){{
+
Private Declare Function LockWorkStation Lib "user32" () As Boolean
+
}}
+

          
+
#code(vb,DllImport属性を使った例){{
+
<DllImport("user32.dll")> _
+
Private Shared Function LockWorkStation() As Boolean
+
End Function
+
}}
+

          
+
DllImport属性や外部DLLの呼び出しとプロシージャの宣言については詳しく解説しないので、必要に応じて他のドキュメントや[[programming/netfx/attributes]]などを参照してください。
+

          
 
#navi(..)
#navi(..)