上へ ビットマップの処理速度 色変換速度 数式演算速度 冪乗演算速度 検索速度 文字列処理速度 文字列/数値処理速度 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 の配列に入れる。
●結果
マシン仕様
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");
|