ホーム ] TIPS ] ソフトウェア実験室 ]

上へ
ビットマップの処理速度
色変換速度
数式演算速度
冪乗演算速度
検索速度
文字列処理速度
文字列/数値処理速度
CPU演算速度
TicksとPerformance Counter
文字の数値化
数値化文字の再現
数値化文字の補間
補間の効果
ネイピア数
ネイピア数2
指数関数近似値
級数の収束速度1
級数の収束速度2
級数の精度
逆三角関数を求める
算術幾何平均でπを求める
全フォルダ列挙
ビットマップとメモリリソース
配列とメモリリソース

ソフトウェア実験室

数式演算速度

最終更新:2005/02/25 新規

 三次式の演算速度を比較する。

●比較対象

  ・VB.NET
  ・C#.NET

  言語の違いでは、VB、C#の違いはソースレベルでの記述は異なるが、中間言語ではほぼ同じと思われ、また、ベースのクラスライブラリも全く同じなので、違いはそんなにないと予測される。

●比較・実験方法

 Y = A * X ^ 3 + B * X ^ 2 + C * X + D を演算し、結果を1024 X 1024 の配列に入れる。

●結果  

VB C#
641 ms 640 ms

マシン仕様
  CPU:ペンティアム4 2GHz、メモリ:512MB、OS:Windows XP Pro SP2  

●考察

 予測通り、VBとC#で速度差はほとんどない

●結論

 数値演算ではVBでも遜色ない。

●実験のプログラムリスト

 実験方法で述べた方式を自動的に行い、平均値を表にするプログラムをVB.NET、C#.NETで作成した。メインのループ処理部のみ掲載。

・VB.NET

Dim i, j As Integer
Dim X, Y(,), A, B, C, D As Double
Dim ts As Long
ReDim Y(1024, 1024)
X = 7.77
A = 5.55
B = 2.22
C = 1.11
D = 0.11
ts = Now.Ticks
For i = 0 To 1024 - 1
    For j = 0 To 1024 - 1
       Y(i, j) = A * X ^ 3 + B * X ^ 2 + C * X + D       '演算子 ^ は内部では関数となる
    Next
Next
ts = (Now.Ticks - ts) / 10000
lblR.Text = ts.ToString("#,##0")

・C#.NET

double X = 7.77;
double [,] Y = new Double [1024, 1024];
double A = 5.55;
double B = 2.22;
double C = 1.11;
double D = 0.11;
long ts = DateTime.Now.Ticks;
for (int i = 0; i < 1024; i++)
{
   for (int j = 0; j < 1024; j++)
   {
      Y[i, j] = A * Math.Pow(X, 3) + B * Math.Pow(X, 2) + C * X + D;
   }
}
ts = (DateTime.Now.Ticks - ts)/10000;
lblR.Text = ts.ToString("#,##0");