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

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

ソフトウェア実験室

文字列/数値処理速度

最終更新:2006/01/18

 多倍長演算などでは、長い数値を数値配列(Short、Integerなど)に変換するが、バイナリ進数でない場合は、十進法となり、厄介な処理が必要となる。ここでは、元がLongの数値を、Short配列で、万進法で表現する場合の、方式による速度比較をしたので紹介する。

●比較対象

String型とネイティブな数値型
  

●比較・実験方法

 Long値 = 123045607890123000 を、Short配列に左揃えで、万進法で下図のように格納する。浮動小数点の仮数部となる。最上位桁が0でないようにする必要がある。これを、各方法で1万回繰り返し、時間を計測する。

○文字列による処理方法

 文字列の場合は、便利なメソッドが多数あり、コードはものすごく簡単になるが、果たして速度は如何に?

 ToStringメソッドで数値を文字列にし、4桁の倍数になるよう、右に"0"を埋める。これは、PadRightメソッドで一括処理できる。その後、SubStringメソッドで頭から4桁づつ取り出し、数値化して、Short配列に入れる。文字列による処理は簡明で魅力的ではある。

○数値による処理

バイナリでないので処理は煩雑となり、処理時間が気になるところ。

 数値を万進数の基数である、10000で整数除算し、剰余を配列0に入れ、商を次の値にして繰り返す。配列サイズは不明なので、商が0になるまで、繰り返し、配列はRedim Preserveで拡大してゆく。できた配列は順序が逆なので、Array.Reverseメソッドで入れ替える。次に、配列の最上位要素の千の位に数字が来るように、全体をシフトアップする。これは、乗算で行う。配列の後ろの0である要素を除去する。

●結果

 数値による処理が文字列処理より10倍以上速い。

●考察

 文字列による処理は、コードが非常に簡単で短くできるが、コード長には関係なく、速度が決まっている。簡明なコードが高速とは限らない例と言える。

●結論

 数値から内部形式の変換などは、多倍長では正規化処理で頻繁に現われる。ここはやはり、コードは複雑になるが、数値処理を採用すべきである。