JPH04177461A - 高速技術計算方法 - Google Patents
高速技術計算方法Info
- Publication number
- JPH04177461A JPH04177461A JP2305035A JP30503590A JPH04177461A JP H04177461 A JPH04177461 A JP H04177461A JP 2305035 A JP2305035 A JP 2305035A JP 30503590 A JP30503590 A JP 30503590A JP H04177461 A JPH04177461 A JP H04177461A
- Authority
- JP
- Japan
- Prior art keywords
- complex
- function
- program
- fft
- point
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Complex Calculations (AREA)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
【発明の詳細な説明】
〔産業上の利用分野〕
、1:(7)発明は、コンピュータによる技術計算の高
速化に関するものである。
速化に関するものである。
第5図(a)、(b)は、CQ出版の[Cによる科学技
術計算」小池慎−著の209ページ〜211ページに掲
載されていたC言語による複素数演算プログラムである
。
術計算」小池慎−著の209ページ〜211ページに掲
載されていたC言語による複素数演算プログラムである
。
(1)は複素数を表現する形式complexを定義し
ており、複素数の実数部を倍精度浮動小数点(以降do
ubleと略す)のreであられし、虚部をdoubl
eの1mであられしている。(2)は(1)で定義した
complex型の加算用の関数caddであり、(3
)はcomplex型の減算用の関数csul、(4)
はcomplex型の乗算用の関数cmulであり、(
5)はcomplex型の除算用の関数cdivである
。(6)はcomplex型の数の絶対値を求める関数
cabsであり、 (7)はdouble型の数2つを
各成分とするcomplex型の数を求める関数to−
complexである。
ており、複素数の実数部を倍精度浮動小数点(以降do
ubleと略す)のreであられし、虚部をdoubl
eの1mであられしている。(2)は(1)で定義した
complex型の加算用の関数caddであり、(3
)はcomplex型の減算用の関数csul、(4)
はcomplex型の乗算用の関数cmulであり、(
5)はcomplex型の除算用の関数cdivである
。(6)はcomplex型の数の絶対値を求める関数
cabsであり、 (7)はdouble型の数2つを
各成分とするcomplex型の数を求める関数to−
complexである。
第6図は同じ< rcによる科学技術計算」の218ペ
ージに掲載されていた複素数演算を用いたFFTプログ
ラムである。(10)はサブルーチン名cfftの宣言
部、(11)はピットリバーサル操作部の先頭、(12
)はバタフライ棟部の先頭を示している。
ージに掲載されていた複素数演算を用いたFFTプログ
ラムである。(10)はサブルーチン名cfftの宣言
部、(11)はピットリバーサル操作部の先頭、(12
)はバタフライ棟部の先頭を示している。
第7図(a)、(b)は第6図を元にして図6のプログ
ラムで省略されていたFFT演算後の割り翼部を付加し
た実用的な複素数FFTプログラムである。(10)〜
(12)は第6図と同じものであり、(13)はFFT
演算後の配列Zの要素をnで割る割り翼部を示している
。第8図は、ピットリバーサル部のフローチャート、第
9図はバタフライ稜部のフローチャート、第10図は割
り翼部のフローチャートである。
ラムで省略されていたFFT演算後の割り翼部を付加し
た実用的な複素数FFTプログラムである。(10)〜
(12)は第6図と同じものであり、(13)はFFT
演算後の配列Zの要素をnで割る割り翼部を示している
。第8図は、ピットリバーサル部のフローチャート、第
9図はバタフライ稜部のフローチャート、第10図は割
り翼部のフローチャートである。
次に動作について説明する。
第5図の(2)の関数caddは複素数の変数a。
bを引き数として受は取り、その和である複素数Zを返
すもので、 Z、re(Zの実部)= a 、re(aの実部)+
b 、 re(bの実部)Z、im(Zの虚部)= a
、im(aの虚部)+ b 、 im(bの虚部)を
計算している。
すもので、 Z、re(Zの実部)= a 、re(aの実部)+
b 、 re(bの実部)Z、im(Zの虚部)= a
、im(aの虚部)+ b 、 im(bの虚部)を
計算している。
第5図の(3)の関数csubは同様に複素数の差を返
すもので、X、re=a、re−b、re、 X、im
=a、im−b、imを計算している。
すもので、X、re=a、re−b、re、 X、im
=a、im−b、imを計算している。
第5図の(4)の関数cmulは同様に複素数の積を返
すもので、 X、re=a、reX b、re −a、imX b、
imX、im=a、reX b、1m −a、imX
b、reを計算している。
すもので、 X、re=a、reX b、re −a、imX b、
imX、im=a、reX b、1m −a、imX
b、reを計算している。
第5図の(5)の関数cdivは同様に複素数の商を返
すもので、 を計算している。又、分母がOの時はエラー表示をする
ようになっている。
すもので、 を計算している。又、分母がOの時はエラー表示をする
ようになっている。
第5図の(6)の関数cabsはaの絶対値をdoub
leで返す関数でl a l = (a、re) ”十
(a、im) を計算している。
leで返す関数でl a l = (a、re) ”十
(a、im) を計算している。
第5図の(7)の関数tocolIlplexはdou
bleの変数Xとyを引き数として受は取り、これを複
素数Zに変換して返す関数でZ、re=x、Z、im=
yを実行している。
bleの変数Xとyを引き数として受は取り、これを複
素数Zに変換して返す関数でZ、re=x、Z、im=
yを実行している。
第6図、第7図は複素数演算を用いたFFTのプログラ
ムの例である。
ムの例である。
第8図は前記のプログラムのピットリバーサル部のフロ
ーチャートであり、第7図の(11)の部分を説明して
いる。
ーチャートであり、第7図の(11)の部分を説明して
いる。
第9図は前記プログラムのバタフライ演算部のフローチ
ャートであり、第7図の(12)の部分を説明している
。
ャートであり、第7図の(12)の部分を説明している
。
第10図は第7図の(13)(第6図では省略されてい
る)の割り翼部のフローチャートである。
る)の割り翼部のフローチャートである。
第7図のFFTプログラムcfftに複素数データの配
列Z、FFTの次数を表わす整数1.FFTとRFTを
選択する整数の変数f (f=1ならRFT、f−−1
ならFFTが実行される)を引数として与えて実行させ
ると、f−1なら配列Zのデータをフーリエ逆変換した
データが配列Zに求められる。f=−1なら、配列Zの
データをフーリエ変換したデータが配列Zに求められる
。
列Z、FFTの次数を表わす整数1.FFTとRFTを
選択する整数の変数f (f=1ならRFT、f−−1
ならFFTが実行される)を引数として与えて実行させ
ると、f−1なら配列Zのデータをフーリエ逆変換した
データが配列Zに求められる。f=−1なら、配列Zの
データをフーリエ変換したデータが配列Zに求められる
。
FFTプログラムは、離数フーリエ変換を高速で行なう
プログラムで時間的に変化する離数データg (k)の
周波数スペクトルG (n)を、という関係を用いて求
めるプログラムである。但し、Nはデータ数で通常Zの
ベキ乗で表わされる数(2,4,8,・・・、128,
256,512,1024.・・・)とし、WNは6−
JMで表わされる数である。
プログラムで時間的に変化する離数データg (k)の
周波数スペクトルG (n)を、という関係を用いて求
めるプログラムである。但し、Nはデータ数で通常Zの
ベキ乗で表わされる数(2,4,8,・・・、128,
256,512,1024.・・・)とし、WNは6−
JMで表わされる数である。
FFTプログラムは主に電気信号や機械的信号などがど
のような周波数成分を持つかを求めるのに使われており
、古くは大型コンピュータでしか使われていなかったが
、近年ではパソコン上や測定器上でも使われるようにな
っている。
のような周波数成分を持つかを求めるのに使われており
、古くは大型コンピュータでしか使われていなかったが
、近年ではパソコン上や測定器上でも使われるようにな
っている。
第5図の(2)〜(7)の複素数演算を使用して複素数
FFTを記述すると、第7図のように短いプログラムと
なる。
FFTを記述すると、第7図のように短いプログラムと
なる。
第7図のプログラムをパソコンPC9801RX2上で
ボーランド社のCコンパイラTurbo−Cを用いて実
行させると、データ数N = 1024の時、数値演算
プロセッサがない場合で約13秒必要であった。
ボーランド社のCコンパイラTurbo−Cを用いて実
行させると、データ数N = 1024の時、数値演算
プロセッサがない場合で約13秒必要であった。
数値演算プロセッサ180287−10を付けると、同
じ演算が約3秒で実行できる。但し180287−10
は現状では4万円から6万円程度と高価である。
じ演算が約3秒で実行できる。但し180287−10
は現状では4万円から6万円程度と高価である。
従来の技術計算方法は、以上のようにC言語でサポート
されている倍精度浮動小数点演算で行なわれていた。倍
精度浮動小数点演算では各データを64ビツトの指数方
式で表現している為、10進数では15桁もの高精度が
得られるが、その反面、加減乗除等の基本的な演算でも
整数演算の100〜1000倍の時間を要し1データで
8バイトのメモリを要する。この為、従来の技術計算プ
ログラムでは長時間を要しかつ多くのメモリを必要とし
た。浮動小数点演算を高速化する為、数値演算プロセッ
サが存在するが、かなり高価である為、汎用のパーソナ
ルコンピュータ等では実装されていないものが多い。
されている倍精度浮動小数点演算で行なわれていた。倍
精度浮動小数点演算では各データを64ビツトの指数方
式で表現している為、10進数では15桁もの高精度が
得られるが、その反面、加減乗除等の基本的な演算でも
整数演算の100〜1000倍の時間を要し1データで
8バイトのメモリを要する。この為、従来の技術計算プ
ログラムでは長時間を要しかつ多くのメモリを必要とし
た。浮動小数点演算を高速化する為、数値演算プロセッ
サが存在するが、かなり高価である為、汎用のパーソナ
ルコンピュータ等では実装されていないものが多い。
この発明は、上記のような問題点を解消するためになさ
れたもので、高価な数値演算プロセッサを使わずに、短
時間で結果を求めることができ、かつ必要なメモリの容
量も少ない高速技術計算プログラムを得ることを目的と
する。
れたもので、高価な数値演算プロセッサを使わずに、短
時間で結果を求めることができ、かつ必要なメモリの容
量も少ない高速技術計算プログラムを得ることを目的と
する。
この発明に係る高速技術計算方法は、データを固定小数
点またはブロック浮動小数点で表わし、整数演算を利用
した固定小数点演算もしくは、ブロック浮動小数点で計
算を行なうものである。
点またはブロック浮動小数点で表わし、整数演算を利用
した固定小数点演算もしくは、ブロック浮動小数点で計
算を行なうものである。
この発明における高速技術計算方法は、必要以上に高精
度であり多くのメモリを必要とし、演算に長い時間を要
する倍精度浮動小数点演算のかわりに整数演算を利用し
た固定小数点演算又は、データを全データ共通の指数部
又は係数部と各データごとの固定小数点で表わしたブロ
ック浮動小数点で表わし、整数演算を利用したブロック
の浮動小数点演算で行なうことで技術計算を高速化しか
つデータを格納するのに必要なメモリー容量を削減して
いる。
度であり多くのメモリを必要とし、演算に長い時間を要
する倍精度浮動小数点演算のかわりに整数演算を利用し
た固定小数点演算又は、データを全データ共通の指数部
又は係数部と各データごとの固定小数点で表わしたブロ
ック浮動小数点で表わし、整数演算を利用したブロック
の浮動小数点演算で行なうことで技術計算を高速化しか
つデータを格納するのに必要なメモリー容量を削減して
いる。
以下この発明の一実施例を説明する。
本実施例では、固定小数点を整数を使って表現している
。整数はコンピュータによって表現が異なるが、例えば
パーソナルコンピュータPC:9801シリーズ用のC
コンパイラTurbo−Cver2.0 (ボーランド
社)では、整数は16ビツトの符号付き整数型(以降i
ntと略す)を標準としている。16ビツトの符号付き
整数では21″通りの数が表現でき最小−32768〜
最大32767が表現できる。
。整数はコンピュータによって表現が異なるが、例えば
パーソナルコンピュータPC:9801シリーズ用のC
コンパイラTurbo−Cver2.0 (ボーランド
社)では、整数は16ビツトの符号付き整数型(以降i
ntと略す)を標準としている。16ビツトの符号付き
整数では21″通りの数が表現でき最小−32768〜
最大32767が表現できる。
本実施例ではこの整数の13ビツト目に小数点があるも
のと仮定して整数の8192= 213が固定小数点の
1.01に相当するものと設定した。この固定小数点フ
ォーマットでは、最小−4,0〜最大約3.9999が
表現できる。表現できるOに最も近い数は約0、000
122であり1.0付近の数なら10進で約4桁分の精
度がある。
のと仮定して整数の8192= 213が固定小数点の
1.01に相当するものと設定した。この固定小数点フ
ォーマットでは、最小−4,0〜最大約3.9999が
表現できる。表現できるOに最も近い数は約0、000
122であり1.0付近の数なら10進で約4桁分の精
度がある。
この固定小数点での演算は、加減算なら整数と全く同じ
演算で実行できるが、乗算では1.OXl、0=1.0
となる様に調整する必要がある。又、16ビツトの整数
の積は、最大約10億となり16ビツト符号付整数では
表現できなくなる。そこで乗算では、各整数を32ビッ
ト符号付整数型(以降long intと略す)に直し
て計算する必要がある。
演算で実行できるが、乗算では1.OXl、0=1.0
となる様に調整する必要がある。又、16ビツトの整数
の積は、最大約10億となり16ビツト符号付整数では
表現できなくなる。そこで乗算では、各整数を32ビッ
ト符号付整数型(以降long intと略す)に直し
て計算する必要がある。
32ビット符号付整数では最小約−2億〜最大約21億
までの数が表現できる。long intで乗算後81
92で割り、int型に戻してやれば乗算ができる。例
えば、固定小数点数a =2.0. b =0.5の積
を固定小数点のCに代入する演算をC言語で表記すると
、 tnt a、b、c; a=(fnt) (2,0m8192.0) ;b=(
fnt)(0,518192,0);c=(int)(
(long int)as(long 1nt)b
/8192);となる。但しく1nt)はintへの型
変換を指示するキャスト演算子である。又(long
1nt)はlong intへの型変換を指示するキャ
スト演算子である。固定小数点の割り算も同様にlon
g intで計算する必要がある9例えばa =1.0
. b =2.0で8割るbをCに代入するには int a、b、c; a=(int)(1,O*8192.O);b=(in
t)(2,0零8192.O);c=(int)((l
ong 1nt)a本8192/(long 1n
t)b)HとC言語で記述できる。
までの数が表現できる。long intで乗算後81
92で割り、int型に戻してやれば乗算ができる。例
えば、固定小数点数a =2.0. b =0.5の積
を固定小数点のCに代入する演算をC言語で表記すると
、 tnt a、b、c; a=(fnt) (2,0m8192.0) ;b=(
fnt)(0,518192,0);c=(int)(
(long int)as(long 1nt)b
/8192);となる。但しく1nt)はintへの型
変換を指示するキャスト演算子である。又(long
1nt)はlong intへの型変換を指示するキャ
スト演算子である。固定小数点の割り算も同様にlon
g intで計算する必要がある9例えばa =1.0
. b =2.0で8割るbをCに代入するには int a、b、c; a=(int)(1,O*8192.O);b=(in
t)(2,0零8192.O);c=(int)((l
ong 1nt)a本8192/(long 1n
t)b)HとC言語で記述できる。
このように固定小数点の演算を整数演算の組み合わせで
実行することが可能である。
実行することが可能である。
さらに複素数を2つの固定小数点数で表現することも可
能である。つまり複素数の実部を1つの固定小数点数で
、虚部をもう1つの固定小数点数で表現することができ
る。これをC言語でbcotnp型と定義すると以下の
ようになる。
能である。つまり複素数の実部を1つの固定小数点数で
、虚部をもう1つの固定小数点数で表現することができ
る。これをC言語でbcotnp型と定義すると以下の
ようになる。
typedef 5truct(int x; int
y;)bcompHbcomp Zl、Z2.Z3; この場合複素数Z1の実部がZl、xに、虚部がzi、
yに対応する。Z1冨0,7+J0.7. Z2=0.
5+J O,8の和をZ3に代入するには上の定義式に
て宣言した後 Zl、 x=(int) (0,7零8192.0)
;zl、y=(int)(0,7本8192.0);Z
2.x=(int)(0,5零8192,0)iZ2.
y=(int)(0,8本8192.0):Z3. x
=Z1.x+Z2. x; Z3. y=Z1. y+Z2. y;と書けば良い。
y;)bcompHbcomp Zl、Z2.Z3; この場合複素数Z1の実部がZl、xに、虚部がzi、
yに対応する。Z1冨0,7+J0.7. Z2=0.
5+J O,8の和をZ3に代入するには上の定義式に
て宣言した後 Zl、 x=(int) (0,7零8192.0)
;zl、y=(int)(0,7本8192.0);Z
2.x=(int)(0,5零8192,0)iZ2.
y=(int)(0,8本8192.0):Z3. x
=Z1.x+Z2. x; Z3. y=Z1. y+Z2. y;と書けば良い。
ここで、わかるように浮動小数点型数から固定小数点数
を利用した複素数への変換や、複素数の計算をそのまま
記述すると大変見にくくかつ書くのも大変であるので、
C言語の関数としてやることが好ましい。
を利用した複素数への変換や、複素数の計算をそのまま
記述すると大変見にくくかつ書くのも大変であるので、
C言語の関数としてやることが好ましい。
第1図(a)、(b)はC言語で固定小数点を利用した
複素数計算用のプログラムである。最初の宣言部は上記
説明のものと全く同じである。
複素数計算用のプログラムである。最初の宣言部は上記
説明のものと全く同じである。
(2)の関数bcaddは加算用の関数であり、従来の
実施例の関数caddのcomplexの部分をbco
mpに変えたものである。
実施例の関数caddのcomplexの部分をbco
mpに変えたものである。
(3)の関数bcsubは減算用の関数であり、これも
従来の実施例の関数cs ubのcomplexの部分
をbcompに変えたものである。
従来の実施例の関数cs ubのcomplexの部分
をbcompに変えたものである。
(4)の関数bcmulは積を求める関数であり、従来
の実施例の関数cmulのcomplexの部分をbc
ompに変え、さらに実部、虚部各部の乗算を求める左
辺で整数の型をintからlong intに変換して
から乗算を行ない固定小数点に戻す為、8192で割っ
てから型をint型に戻すように書き変えている。
の実施例の関数cmulのcomplexの部分をbc
ompに変え、さらに実部、虚部各部の乗算を求める左
辺で整数の型をintからlong intに変換して
から乗算を行ない固定小数点に戻す為、8192で割っ
てから型をint型に戻すように書き変えている。
(5)の関数bcdivは商を求める関数であり、従来
の実施例の関数cdivのcoo+plexをbcom
pに変え、整数の型変換を行なっている。固定小数点の
商であるので被除数へ8192を乗じてから、除数で割
れば良いのであるが、分子は2つの固定小数点数の積の
和であり、例えば(2,O+J0.0)/ (2,0+
J O。
の実施例の関数cdivのcoo+plexをbcom
pに変え、整数の型変換を行なっている。固定小数点の
商であるので被除数へ8192を乗じてから、除数で割
れば良いのであるが、分子は2つの固定小数点数の積の
和であり、例えば(2,O+J0.0)/ (2,0+
J O。
0)を計算する場合分子の実部は整数で書けば(163
84) 2+0=268435456であり、これに8
192を乗すると約2.2X10”となりlong i
ntでは表現できなくなる。long 1ntの最大値
は約2X10”であり、先の例の268435456の
8倍であるので商の計算ではたとえば、被除数及び除数
の絶対値が2以下という条件付きで、分子は8倍までが
可能である。そこで、分子8倍して分母は8192÷8
−1024で割ってから割り算を実行し、その後lon
g 1ntからint型へ戻すように変更した。この為
、除数の絶対値が整数でfi=32固定小数点で0.0
04より小さいとエラーとなる。この時は、エラー表示
をするようにした。
84) 2+0=268435456であり、これに8
192を乗すると約2.2X10”となりlong i
ntでは表現できなくなる。long 1ntの最大値
は約2X10”であり、先の例の268435456の
8倍であるので商の計算ではたとえば、被除数及び除数
の絶対値が2以下という条件付きで、分子は8倍までが
可能である。そこで、分子8倍して分母は8192÷8
−1024で割ってから割り算を実行し、その後lon
g 1ntからint型へ戻すように変更した。この為
、除数の絶対値が整数でfi=32固定小数点で0.0
04より小さいとエラーとなる。この時は、エラー表示
をするようにした。
除算をさらに高速化するには、分子への積をやめて分母
を8192で割れば良いが、この場合は除数の絶対値が
整数でfi#90固定小数点で0.01より小さいとエ
ラーとなる。
を8192で割れば良いが、この場合は除数の絶対値が
整数でfi#90固定小数点で0.01より小さいとエ
ラーとなる。
除算の精度を上げるには、たとえば被除数及び除数の絶
対値を1以下という条件にしてやり、231÷(819
2) ”=32の余裕にして分子を32倍し、分母を2
56で割ってから割り算を行なえば良い。
対値を1以下という条件にしてやり、231÷(819
2) ”=32の余裕にして分子を32倍し、分母を2
56で割ってから割り算を行なえば良い。
この場合、除数の絶対値が整数で4r256=16.固
定小数点で0.002より小さい時エラーとなる。
定小数点で0.002より小さい時エラーとなる。
第1図において(6)は、複素数の絶対値を求める関数
bcabsである。従来の実施例のcabsのC0lD
−plexの部分をbcompにおき変えたものである
。
bcabsである。従来の実施例のcabsのC0lD
−plexの部分をbcompにおき変えたものである
。
第2図において(7)は、絶対値が2以下のdoubl
eの数2つをそれぞれ実部、虚部とするbcompの数
を求める関数tabcoa+pであり、従来の実施例の
tocomplexとほぼ同じであるが、固定小数点フ
ォーマットに直す為に8192を掛けている。
eの数2つをそれぞれ実部、虚部とするbcompの数
を求める関数tabcoa+pであり、従来の実施例の
tocomplexとほぼ同じであるが、固定小数点フ
ォーマットに直す為に8192を掛けている。
(8)は複素数bcompO数の配列Z[)のn個の要
素を2で割るサブルーチンbcnormであり、後で述
べるFFTプログラムで使用している。
素を2で割るサブルーチンbcnormであり、後で述
べるFFTプログラムで使用している。
(9)は同じ(bcompの配列Z()のn個1要素を
その各成分(実部、虚部)の絶対値の最大が1以下にな
るように調整するサブルーチンbcnorm2である。
その各成分(実部、虚部)の絶対値の最大が1以下にな
るように調整するサブルーチンbcnorm2である。
M対価の最大値を1以下にする為にZ()の全要素を変
数con8tで割り、配列Z[]の共通の指数部に相当
する変数ampをcanst倍している。このサブルー
チンでは、Zとampよりなるブロック浮動小数点フォ
ーマットをサポートシている。
数con8tで割り、配列Z[]の共通の指数部に相当
する変数ampをcanst倍している。このサブルー
チンでは、Zとampよりなるブロック浮動小数点フォ
ーマットをサポートシている。
(10)は、上で述べた複素演算を利用した複素FFT
プログラムである。従来の実施例とほぼ同じアルゴリズ
ムであるが、従来の実施例ではデータ数Nでの割り算を
プログラムの最後でまとめて行なっていたが、本プログ
ラムではバタフライ積演算を1組行なう度にデータをサ
ブルーチンbcnormを使って2で割ることにより、
Nでの割り算を実行している。 FFTプログラムでは
、バタフライ積を1組行なう度にデータの最大値が約2
倍に増える性質があるので固定小数点が途中でオーバー
フローすることがないように毎回2で割ることにより、
Nでの割り算を実行させている。
プログラムである。従来の実施例とほぼ同じアルゴリズ
ムであるが、従来の実施例ではデータ数Nでの割り算を
プログラムの最後でまとめて行なっていたが、本プログ
ラムではバタフライ積演算を1組行なう度にデータをサ
ブルーチンbcnormを使って2で割ることにより、
Nでの割り算を実行している。 FFTプログラムでは
、バタフライ積を1組行なう度にデータの最大値が約2
倍に増える性質があるので固定小数点が途中でオーバー
フローすることがないように毎回2で割ることにより、
Nでの割り算を実行させている。
この複素FFTプログラムのアルゴリズムの異なる部分
を説明しているフローチャートを第11図、第12図に
示す。第11図において(13)は追加されたbcno
rmサブルーチンの実行位置を示している。第9図の従
来のプログラムで■で示すNでの割り算プログラムへ移
行するかわりに、第11図ではサブルーチンを終了して
メインプログラムへ戻っている。
を説明しているフローチャートを第11図、第12図に
示す。第11図において(13)は追加されたbcno
rmサブルーチンの実行位置を示している。第9図の従
来のプログラムで■で示すNでの割り算プログラムへ移
行するかわりに、第11図ではサブルーチンを終了して
メインプログラムへ戻っている。
図12はbcnormサブルーチンのアルゴリズムを示
すフローチャートで、配列Zの各要素を2で割っている
。この様に固点小数点フォーマットの複素数bcmpを
使って加減乗除算や、複素数FFTが実現できる。
すフローチャートで、配列Zの各要素を2で割っている
。この様に固点小数点フォーマットの複素数bcmpを
使って加減乗除算や、複素数FFTが実現できる。
第4図は、上記の複素数FFTプログラムをテストする
為に作られたC言語のメインプログラムであり、102
4個のデータの実部がサインカーブを描くよう設定し、
虚部は全て0になるよう設定し、複素数FFTプログラ
ムを実行している。
為に作られたC言語のメインプログラムであり、102
4個のデータの実部がサインカーブを描くよう設定し、
虚部は全て0になるよう設定し、複素数FFTプログラ
ムを実行している。
つまり、時間軸で正弦振動をしているようなデータを入
力した時の周波数スペクトラムを求めいている。
力した時の周波数スペクトラムを求めいている。
prJimeというサブルーチンは時刻を表示するプロ
グラムで二〇FFTプログラムで消費した時間を求めさ
せている。
グラムで二〇FFTプログラムで消費した時間を求めさ
せている。
このメインプログラムを実行させて時間を測った結果1
024点のFFTが約2秒で完了した。
024点のFFTが約2秒で完了した。
従来の実施例に比べて約6倍の高速化が実現できた。数
値演算プロセッサを使用したものよりも少し速い、但し
精度は2桁〜3桁程度である。例えば、8ビツトのA/
Dコンバータ等で入力されたデータの処理用としてはこ
の精度は充分な値であると思われる。又結果を画面(4
00ドツト×640ドツト)にグラフィック表示するよ
うなアプリケーションプログラムでも、これだけの精度
があれば十分である。
値演算プロセッサを使用したものよりも少し速い、但し
精度は2桁〜3桁程度である。例えば、8ビツトのA/
Dコンバータ等で入力されたデータの処理用としてはこ
の精度は充分な値であると思われる。又結果を画面(4
00ドツト×640ドツト)にグラフィック表示するよ
うなアプリケーションプログラムでも、これだけの精度
があれば十分である。
なお、上記実施例ではC言語上でプログラムを記述した
がPASCAL等の他の構造化した高級言語でも同様の
プログラムが作成できる。
がPASCAL等の他の構造化した高級言語でも同様の
プログラムが作成できる。
又、上記実施例ではFFTを実行するプログラムを記述
したが、同じような複数個のデータを処理する技術計算
プログラムなら同様の手法で高速化が可能である。
したが、同じような複数個のデータを処理する技術計算
プログラムなら同様の手法で高速化が可能である。
又、上記実施例ではFFTを複素数演算を用いて計算し
ているが、複素数の実数部と虚数部のデータを分けてそ
れぞれ別の配列にして、通常の実数演算を用いて計算す
ることも可能である。
ているが、複素数の実数部と虚数部のデータを分けてそ
れぞれ別の配列にして、通常の実数演算を用いて計算す
ることも可能である。
又、上記実施例で使用したデータの複素数表現、複素数
演算を用いて各種の技術計算を行なうことも可能である
が、技術計算の種類によっては固定小数点の精度が10
進数で約4桁である為、演算中に大きな誤差を生じる場
合があるので注意が必要である。
演算を用いて各種の技術計算を行なうことも可能である
が、技術計算の種類によっては固定小数点の精度が10
進数で約4桁である為、演算中に大きな誤差を生じる場
合があるので注意が必要である。
以上のようにこの発明によれば、数値演算を整数演算を
利用してブロック浮動小数点フォーマットで行なったの
で、高価な数値演算プロセッサを使うことなく、高速で
技術計算を行なうことができ、かつ必要とするメモリ容
量も削減することができる。
利用してブロック浮動小数点フォーマットで行なったの
で、高価な数値演算プロセッサを使うことなく、高速で
技術計算を行なうことができ、かつ必要とするメモリ容
量も削減することができる。
第1図はこの発明の一実施例による複素数の加減乗除と
絶対値を求める関数の方法を示す図、第2図はこの発明
の一実施例による複素数の処理方法を示す図、第3図は
この発明の一実施例による複素FFTを示す図、第4図
はこの発明の一実施例による図、第5図は従来の複素数
演算用関数の図、第6図は従来の複素数演算を用いたF
FT図、第7図は従来の実用的な複素数FFT図、第8
図は従来及びこの発明の一実施例共通の複素数FFTプ
ログラムのピットリバーサル部のフローチャート、第9
図は従来の複素数FFTプログラムのバタフライ種部の
フローチャート、第10図は従来の複素数FFTプログ
ラムの割り算部のフローチャート、第11図はこの発明
の一実施例による複素数FFTプログラムのバタフライ
種部のフローチャート、第12図はこの発明の一実施例
による複素数FFTプログラムのサブルーチンBCNO
RHのフローチャートである。 (1)は複素数の構造体宣言、(2)は複素数の加算用
関数、(3)は複素数の減算用関数、(4)は複素数の
乗算用関数、(5)は複素数の除算用関数、(6)は複
素数の絶対値を求める関数、 (7)は実数2つから複
素数を作る関数、(8)は複素数の配列のn個の要素を
2で割るサブルーチン、(9)は複素数の配列の要素の
各成分の最大値を1より小さくするサブルーチン、(1
0)は複素数FFTサブルーチン、(11)はピットリ
バーサル部、(12)はバタフライ種部、(13)は割
り算部を示す。 なお、図中、同一符号は同一もしくは相当部分を示す。
絶対値を求める関数の方法を示す図、第2図はこの発明
の一実施例による複素数の処理方法を示す図、第3図は
この発明の一実施例による複素FFTを示す図、第4図
はこの発明の一実施例による図、第5図は従来の複素数
演算用関数の図、第6図は従来の複素数演算を用いたF
FT図、第7図は従来の実用的な複素数FFT図、第8
図は従来及びこの発明の一実施例共通の複素数FFTプ
ログラムのピットリバーサル部のフローチャート、第9
図は従来の複素数FFTプログラムのバタフライ種部の
フローチャート、第10図は従来の複素数FFTプログ
ラムの割り算部のフローチャート、第11図はこの発明
の一実施例による複素数FFTプログラムのバタフライ
種部のフローチャート、第12図はこの発明の一実施例
による複素数FFTプログラムのサブルーチンBCNO
RHのフローチャートである。 (1)は複素数の構造体宣言、(2)は複素数の加算用
関数、(3)は複素数の減算用関数、(4)は複素数の
乗算用関数、(5)は複素数の除算用関数、(6)は複
素数の絶対値を求める関数、 (7)は実数2つから複
素数を作る関数、(8)は複素数の配列のn個の要素を
2で割るサブルーチン、(9)は複素数の配列の要素の
各成分の最大値を1より小さくするサブルーチン、(1
0)は複素数FFTサブルーチン、(11)はピットリ
バーサル部、(12)はバタフライ種部、(13)は割
り算部を示す。 なお、図中、同一符号は同一もしくは相当部分を示す。
Claims (1)
- 構造化された汎用の高級言語上で、複数個のデータを処
理する技術計算において、整数演算を利用したブロック
化浮動小数点演算もしくは固定小数点演算を用いたこと
を特徴とする、高速技術計算方法。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2305035A JPH04177461A (ja) | 1990-11-07 | 1990-11-07 | 高速技術計算方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2305035A JPH04177461A (ja) | 1990-11-07 | 1990-11-07 | 高速技術計算方法 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH04177461A true JPH04177461A (ja) | 1992-06-24 |
Family
ID=17940317
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2305035A Pending JPH04177461A (ja) | 1990-11-07 | 1990-11-07 | 高速技術計算方法 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH04177461A (ja) |
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH07325710A (ja) * | 1994-05-31 | 1995-12-12 | Nec Corp | 固定小数点演算のアセンブラを模擬した高級言語プログラムの作成方法および演算精度検討方法 |
| US6889240B2 (en) | 1995-10-09 | 2005-05-03 | Renesas Technology Corp. | Data processing device having a central processing unit and digital signal processing unit |
-
1990
- 1990-11-07 JP JP2305035A patent/JPH04177461A/ja active Pending
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH07325710A (ja) * | 1994-05-31 | 1995-12-12 | Nec Corp | 固定小数点演算のアセンブラを模擬した高級言語プログラムの作成方法および演算精度検討方法 |
| US6889240B2 (en) | 1995-10-09 | 2005-05-03 | Renesas Technology Corp. | Data processing device having a central processing unit and digital signal processing unit |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US20090265410A1 (en) | Packed add-subtract operation in a microprocessor | |
| KR980010751A (ko) | 부동 소수점 하드웨어를 사용하여 마이크로프로세서 정수 나눗셈 연산을 실행하기 위한 방법 및 장치 | |
| JPH08185309A (ja) | 4倍精度演算の実行方法 | |
| JPH0612229A (ja) | 乗累算回路 | |
| JP2011501310A (ja) | 算術演算のためにマグニチュード検出を実行するための装置および方法 | |
| JPH0477932B2 (ja) | ||
| US6674435B1 (en) | Fast, symmetric, integer bezier curve to polygon conversion | |
| Kulshreshtha et al. | CORDIC-based high throughput sliding DFT architecture with reduced error-accumulation | |
| CN118312130B (zh) | 数据处理方法及装置、处理器、电子设备、存储介质 | |
| Corless et al. | Blends in MAPLE | |
| Hartwell | A procedure for implementing the fast Fourier transform on small computers | |
| CN100562845C (zh) | 使用缩减宽度数据进行计算的方法和装置 | |
| US3654437A (en) | Octal/decimal calculator | |
| Campos et al. | Fpga implementation of custom floating-point logarithm and division | |
| JPH0325809B2 (ja) | ||
| Eberly | A fast and accurate algorithm for computing slerp | |
| Isupov et al. | Parallel computation of normalized legendre polynomials using graphics processors | |
| RU2276805C2 (ru) | Способ и устройство для выделения целой и дробных компонент из данных с плавающей точкой | |
| Godunov | Algorithm for Calculating Correctly Rounded Exponential Function in Double Precision Using Double-Extended Arithmetic | |
| JPH03192429A (ja) | 平方根演算装置 | |
| JP2764975B2 (ja) | 精度つき浮動小数点数演算処理装置 | |
| Andrews et al. | Evaluation of functions on microcomputers: square root | |
| JP2508286B2 (ja) | 平方根演算装置 | |
| JP2972326B2 (ja) | 平方根計算装置 | |
| JP3691538B2 (ja) | ベクトルデータ加算方法及びベクトルデータ乗算方法 |