プログラムの実行速度を向上するには、ハードウェアの事を知る必要があります。 スカラマシン、ベクトルマシン、並列マシンの差や、 また、専用の加算機や乗算機を持っているマシン等があり、 それらハードウェアの特徴にあわせなければなりません。 ここではマシンにあまり依存しない基本的な高速化法についてのみ例をあげます。 ベクトル化や並列化等のマシンに依存した高速化の話は簡単では無いので省略します。 どうしても必要な場合には、専門家に相談したほうがようでしょう。
× | → | ○ |
---|---|---|
a/2.0d0 | → | a*0.5d0 |
a/b/c | → | a/(b*c) |
× | a*x**3 + b*x**2 + c*x + d | (冪乗は掛け算より計算速度が遅い事が多い) |
---|---|---|
△ | a*x*x*x + b*x*x + c*x + d | (因数分解等でなるべく演算回数を減らす事を心がける) |
○ | ((a*x + b)*x +c)*x + d | ok |
c この書き方はダメ do 10 i=1,mi do 20 j=1,mj a(i,j) = b(i,j)+c(i,j) 20 continue 10 continue c 次の書き方の方が速い(たぶん) do 30 j=1,mj do 40 i=1,mi a(i,j) = b(i,j)+c(i,j) 40 continue 30 continue
c この書き方はダメ ( r:real, d:double, i:integer とする ) r = r/3 + sin(5) d = 3.0d0/i c 次の書き方の方が良い r = r/3.0 + sin(5.0) d = 3.0d0/dble(i) c (dfloatは77に規格に無い)