[go: up one dir, main page]

JP2583599B2 - 2進整数乗算処理方法 - Google Patents

2進整数乗算処理方法

Info

Publication number
JP2583599B2
JP2583599B2 JP1033927A JP3392789A JP2583599B2 JP 2583599 B2 JP2583599 B2 JP 2583599B2 JP 1033927 A JP1033927 A JP 1033927A JP 3392789 A JP3392789 A JP 3392789A JP 2583599 B2 JP2583599 B2 JP 2583599B2
Authority
JP
Japan
Prior art keywords
bits
bit
multiplicand
multiplier
overflow
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.)
Expired - Fee Related
Application number
JP1033927A
Other languages
English (en)
Other versions
JPH02212927A (ja
Inventor
孝則 寺田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP1033927A priority Critical patent/JP2583599B2/ja
Publication of JPH02212927A publication Critical patent/JPH02212927A/ja
Application granted granted Critical
Publication of JP2583599B2 publication Critical patent/JP2583599B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Description

【発明の詳細な説明】 〔概要〕 計算機が持つ乗算命令実行機構で扱う2進整数の長さ
の2倍の長さを持つ被乗数および乗数の乗算を行う2進
整数乗算処理方法に関し, FORTRANプログラム等における63ビット整数型の乗算
を,浮動小数点命令を使用しないで実現する手段を提供
することを目的とし, 被乗数Xおよび乗数Yのそれぞれについて,上位nビ
ットと下位nビットとに分割して,各々nビットのレジ
スタに割り当てる処理過程と,nビットのレジスタに割り
当てた被乗数Xおよび乗数Yのそれぞれについて,上位
nビットを左に1ビット分シフトするとともに,下位n
ビットの最上位ビットを,上位nビットの最下位ビット
に繰り入れる処理過程と,被乗数Xの上位nビットおよ
び乗数Yの上位nビットの値により,場合分けを行い,
オーバフローの検出を行うとともに,オーバフローとな
らない場合に,各nビットのデータ間の演算により,被
乗数Xと乗数Yとの2nビットの範囲内で表される積を計
算する処理過程とを備えるように構成する。
〔産業上の利用分野〕
本発明は,計算機が持つ乗算命令実行機構で扱う2進
整数の長さの2倍の長さを持つ被乗数および乗数の乗算
を行う2進整数乗算処理方法に関する。
計算機による科学技術計算や事務処理計算では,乗算
が頻繁に用いられる。計算機で扱う数値の中で最も単純
な形式は,2進整数であるが,乗算の対象となる2進整数
で表される被乗数,乗数について,桁数を増やすことが
望まれる。
〔従来の技術〕
従来,1語32ビットの計算機などによって実行されるFO
RTRANプログラムでは,31ビット整数型どうしの乗算が可
能であるが,63ビット整数型の乗算は実行できなかっ
た。
〔発明が解決しようとする課題〕
従来,FORTRANプログラム等では,63ビット整数型の乗
算ができなかったため,そのような乗算を行う場合に
は,例えば整数型の数値を浮動小数点に変換し,浮動小
数点命令を使用して乗算を行った後,結果について整数
型に型変換を行うというような処理が必要になるという
問題があった。そのため,処理手続きが煩雑で,処理も
遅くなるという問題があった。
本発明は上記問題点の解決を図り,FORTRANプログラム
等における63ビット整数型の乗算を,浮動小数点命令を
使用しないで実現する手段を提供することを目的として
いる。
〔課題を解決するための手段〕
第1図は本発明の構成例を示す。
第1図において,10はCPUおよびメモリ等からなる計算
機,P1ないしP3は計算機10による乗算のための処理過程,
Xは被乗数,Yは乗数,R1ないしR4はレジスタを表す。
計算機10は,nビットのデータを保持する複数のレジス
タR1〜R4を持ち,これらのレジスタに設定された2進整
数の乗算命令実行機構を有する。
それぞれ2nビットの範囲内で表される2進整数である
被乗数Xおよび乗数Yの乗算を行う場合,次のような処
理過程P1〜P3によって,乗算を実行する。
処理過程P1では,被乗数Xを,上位nビットのX1と,
下位nビットのX2とに分け,それぞれレジスタR1,レジ
スタR2に設定する。また,乗数Yを,上位nビットのY1
と,下位nビットのY2とに分け,それぞれレジスタR3,
レジスタR4に設定する。
処理過程P2では,レジスタR1,レジスタR2に割り当て
た被乗数Xについて,上位nビットを左に1ビット分シ
フトするとともに,下位nビットの最上位ビットを,上
位nビットの最下位ビットに繰り入れる処理を行う。同
様に,レジスタR3,レジスタR4に割り当てた乗数Yにつ
いて,上位nビットを左に1ビット分シフトするととも
に,下位nビットの最上位ビットを,上位nビットの最
下位ビットに繰り入れる処理を行う。
次に,処理過程P3では,被乗数Xの上位nビットX1お
よび乗数Yの上位nビットY2の値により,場合分けを行
い,オーバフローの検出を行うとともに,オーバフロー
とならない場合に,上記各nビットのデータ間の演算に
より,被乗数Xと乗数Yとの積を計算する。
〔作用〕
本発明では,1語がnビットの計算機10により,2nビッ
トの範囲内で表される被乗数X,乗数Yについての乗算を
行うにあたって,まず,処理過程P1により,それぞれn
ビットに分割する。
このnビット間で,そのまま乗算命令を実行すると,
下位nビットの先頭ビットが符号ビットとして扱われる
ため,このビットがたまたま“1"であるとすると,部分
的に負の数の計算が行われることになる。そこで,処理
過程P2により,この下位nビットの先頭ビットを,上位
nビットの最下位ビットに繰り入れ,下位nビットの先
頭ビットを0とする。上位nビットの元の値は,1ビット
ずつ左側へシフトする。
次に,処理過程P3では,乗算結果が2nビット(実質の
有効桁としては,2n−1ビット)の範囲内で表されるよ
うに,オーバフローの検査を行い,各nビットの積およ
び和を計算して,求めるべき計算結果を得る。
〔実施例〕
第2図は本発明の一実施例についての適用システムの
例,第3図は本発明の一実施例による処理の例,第4図
は本発明の一実施例処理フローを示す。
本発明は,例えば第2図に示すようなシステムにおい
て実施される。第2図において,20はFORTRAN言語で記述
されたプログラムをコンパイルした結果のFORTRANオブ
ジェクトプログラム,21はパラメータリスト,22はライブ
ラリとして提供される63ビット乗算関数ルーチンを表
す。
従来,FORTRAN言語によるプログラムでは,63ビット整
数型どうしの乗算はできず,仕様制限になっていた。本
実施例では,63ビット整数型の乗算を行う場合,FORTRAN
オブジェクトプログラム20は,それぞれ63ビット整数型
の被乗数X,乗数Yおよび結果域からなるパラメータリス
ト21を作成し,あらかじめ用意された63ビット乗算関数
ルーチン22を呼び出す。
63ビット乗算関数ルーチン22は,第1図に示すような
処理過程により,63ビット整数型の乗算を実行する。そ
して,乗算結果をパラメータリスト21の結果域に設定し
て,呼び出し元のFORTRANオブジェクトプログラム20に
復帰する。
例えば,第3図(a)に示すように,FORTRANオブジェ
クトプログラム20において, 「I=2147483648*2」 の乗算を行うとする。
FORTRANオブジェクトプログラム20は,第3図(b)
に示すようなパラメータリスト21を作成し,その先頭ア
ドレスを所定のレジスタRegに設定して,63ビット乗算関
数ルーチン22を呼び出す。
63ビット乗算関数ルーチン22は,第3図(c),
(d)に示すように,被乗数X,乗数Yを,それぞれ32ビ
ットのX1,X2およびY1,Y2に分割し,X2,Y2の先頭ビット
を,それぞれX1,Y1に繰り入れる処理を行う。なお,第
3図(c),(d)では,数値を16進数字で表してい
る。この例における10進数字表現の「2147483648」は2
31であり,32ビット+32ビットの16進数字表現では,「0
0000000」「80000000」と表される。
演算の原理は,以下のとおりである。
Z=X・Yを考える。ここで,X≧0,Y≧0とする。
X=X1・231+X2,Y=Y1・231+Y2 (0≦X2,Y2≦231)とすると, Z=X・Y =X1・Y1・262+(X1・Y2+X2・Y1)×231+X2・Y2 となる。ここで, X1・Y1≧0 X1・Y2+X2・Y1≧0 X2・Y2≧0であるから, Z≦263となるためには, X1・Y1≦2でなければならない。
これを満たす組(X1,Y1)によって,以下の組み合わ
せになる。
この場合分けによる処理は,以下のとおりになる。
i)X1=0,Y1=0の場合 これは,Z=X2・Y2を計算すればよい。
ii)X1=Y1=1の場合 Z=262+(X2+Y2)231+X2・Y2であるから, Z≦263は, (X2+Y2)231+X2・Y2≦262 ……(1) と同値である。
X2<231,Y2<231から, X2+Y2<232,X2・Y2<262であるから,(1)式の左辺
の計算において,論理加算命令で桁溢れ(オーバフロ
ー)が起こることはない。
従って,(1)式が成立することと,X,Yで桁溢れが起
きないことは同値であり,(1)式で等号が成立してよ
いのは,X・Y<0の場合だけである。
iii)(X1=0かつY≠0)または (X1≠0かつY1=0)の場合 X1≠0かつY1=0と仮定しても一般性は失われない。
このとき, Z=X1・Y2・231+X2・Y2となる。
Z≦263は, X1・Y2・231+X2・Y2≦263 ……(2) と同値になる。従って,X1・Y2の計算で,上位4バイト
(32ビット)が0でなければ,桁溢れとなる。
iv)(X1=2かつY1=1)または (X1=1かつY1=2)の場合 この場合,X1・Y2+X2・Y1=0かつX2・Y2=0から,X2
=Y2=0であり,かつX・Y<0でなければ桁溢れにな
る。
v)X1≧2かつY1≧の場合 X1・Y1・263≧265であるので,桁溢れとなる。
以上の演算の原理を利用して,63ビット整数型の乗算
およびオーバフローの検出を,第4図に示す処理〜
のように行う。以下,第4図に示す処理〜に従って
説明する。
被乗数Xおよび乗数Yを,それぞれ上位・下位の32
ビットずつに分割し,その分割したX1,X2およびY1,Y2を
それぞれレジスタに設定する。
Xが負数ならば,符号を反転して正数にする。この
処理は以下のように行う。
X1<0なら,Xに−X1−1を入れる。
さらに,X2が最小値でないなら,X2に−X2を入れる。X
の符号を反転したことを記憶しておく。
Yについても同様に,負数ならば,符号を反転して正
数にする。
次に,X2の先頭ビットX1に繰り入れる処理を行う。
この処理は以下のように行う。
X1とX2を合わせて左に1ビットシフトする。
X2だけを右に1ビットシフトする。
Y2の先頭ビットについても,同様にY1の最下位ビット
に繰り入れる処理を行う。
X1とY1の値により,処理i〜処理vの場合分けを行
う。
前述した演算の原理に従って,各場合分けに応じた
オーバフロー検出を行い,オーバフローが起きない場合
に,32ビットの乗算と論理和の各演算により,積(Z)
を計算する。なお,X,Yが負数ならば,符号反転により,
正数に直して計算を行っているので,最後に元のX,Yの
どちらか一方だけが負数である場合に,積Zの符号を反
転して,Zを負数で表す。
〔発明の効果〕
以上説明したように,本発明によれば,例えば1語が
32ビットの計算機上で,63ビット整数型の乗算を浮動小
数点命令を使用しないで実現できるようになり,応用プ
ログラムにおける計算精度を向上させるとともに,処理
負担を軽減することが可能になる。
【図面の簡単な説明】
第1図は本発明の構成例 第2図は本発明の一実施例についての適用システムの
例, 第3図は本発明の一実施例による処理の例, 第4図は本発明の一実施例処理フローを示す。 図中,10は計算機,P1〜P3は処理過程,R1〜R4はレジスタ,
Xは被乗数,Yは乗数を表す。

Claims (1)

    (57)【特許請求の範囲】
  1. 【請求項1】nビットのデータを保持する複数のレジス
    タを備えるとともに,nビットの2進整数による被乗数と
    nビットの2進整数による乗数との乗算命令実行機構を
    有する計算機を用いて,それぞれ2nビットの範囲内で表
    される2進整数である被乗数Xおよび乗数Yの乗算を行
    い,2nビット範囲内で表される積を算出する2進整数乗
    算処理方法であって, 被乗数Xおよび乗数Yのそれぞれについて,上位nビッ
    トと下位nビットとに分割して,各々上記nビットのレ
    ジスタに割り当てる処理過程(P1)と, 上記nビットのレジスタに割り当てた被乗数Xおよび乗
    数Yのそれぞれについて,上位nビットを左に1ビット
    分シフトするとともに,下位nビットの最上位ビット
    を,上位nビットの最下位ビットに繰り入れ,下位nビ
    ットの最上位ビットのビット値を0とする処理過程(P
    2)と, 上記ビットシフト処理後の被乗数Xおよび乗数Yの上位
    nビットをX1,Y1,下位nビットをX2,Y2としたとき,被
    乗数Xの上位nビットX1および乗数Yの上位nビットY1
    の値による場合分けに応じて, X1=0かつY1=0の場合,上記乗算命令実行機構を用
    いて,Z=X2・Y2に相当する演算を行い, X1=1かつY1=1の場合,オーバフローの検出を行う
    とともに,オーバフローとならないときに,上記乗算命
    令実行機構を用いて,Z=22n-2+(X2+Y2)2n-1+X2・Y
    2に相当する演算を行い, X1≠0かつY1=0の場合,オーバフローの検出を行う
    とともに,オーバフローとならないときに,上記乗算命
    令実行機構を用いて,Z=X1・Y2・2n-1+X2・Y2に相当す
    る演算を行い, X1=0かつY1≠0の場合,オーバフローの検出を行う
    とともに,オーバフローとならないときに,上記乗算命
    令実行機構を用いて,Z=X2・Y1・2n-1+X2・Y2に相当す
    る演算を行い, その他の場合に,オーバフローによるエラー処理また
    はZ=負の最小値とする処理を行い, 被乗数Xと乗数Yとの2nビットの範囲内で表される積を
    算出する処理過程(P3)とを備えたことを特徴とする2
    進整数乗算処理方法。
JP1033927A 1989-02-14 1989-02-14 2進整数乗算処理方法 Expired - Fee Related JP2583599B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP1033927A JP2583599B2 (ja) 1989-02-14 1989-02-14 2進整数乗算処理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP1033927A JP2583599B2 (ja) 1989-02-14 1989-02-14 2進整数乗算処理方法

Publications (2)

Publication Number Publication Date
JPH02212927A JPH02212927A (ja) 1990-08-24
JP2583599B2 true JP2583599B2 (ja) 1997-02-19

Family

ID=12400153

Family Applications (1)

Application Number Title Priority Date Filing Date
JP1033927A Expired - Fee Related JP2583599B2 (ja) 1989-02-14 1989-02-14 2進整数乗算処理方法

Country Status (1)

Country Link
JP (1) JP2583599B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7672989B2 (en) * 2005-05-09 2010-03-02 Sandisk Il Ltd. Large number multiplication method and device
CN111596888A (zh) * 2020-03-02 2020-08-28 成都优博创通信技术股份有限公司 一种在低位宽mcu上实现32位无符号数整型乘法运算的方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH061438B2 (ja) * 1984-04-26 1994-01-05 日本電気株式会社 倍精度乗算器

Also Published As

Publication number Publication date
JPH02212927A (ja) 1990-08-24

Similar Documents

Publication Publication Date Title
CN104254833A (zh) 基于向量和标量的模取幂
EP3200068B1 (en) Parallel computing method and terminal
Linhardt et al. Digit-by-digit transcendental-function computation
US8856759B2 (en) Method and apparatus providing COBOL decimal type arithmetic functions with improved performance
JP2583599B2 (ja) 2進整数乗算処理方法
US7644115B2 (en) System and methods for large-radix computer processing
Buell et al. A multiprecise integer arithmetic package
US20040117423A1 (en) Signed integer long division apparatus and methods for use with processors
JP2708526B2 (ja) 2進整数除算処理方法
CN101300544A (zh) 大数乘法方法和装置
Hull et al. Specifications for a variable-precision arithmetic coprocessor.
Knöfel A hardware kernel for scientific/engineering computations
EP0166999A2 (en) Time saving method for computing square roots on a computer having a "one bit at a time" division instruction
JPH09128213A (ja) ブロックフローティング処理システムおよび方法
Monniaux et al. Formally verified 32-and 64-bit integer division using double-precision floating-point arithmetic
JP2578482B2 (ja) 浮動小数点演算器
US20100169605A1 (en) Arbitrary precision floating number processing
Andrews Influence of architecture on numerical algorithms
JP3415569B2 (ja) 10進データ除算方法およびそのプログラム記録媒体
JPH081592B2 (ja) 演算処理装置
Takahashi A parallel algorithm for multiple-precision division by a single-precision integer
Lloris Ruiz et al. Multiplication
US6708180B1 (en) Method and apparatus for runtime remediation of object-code instructions in a computer program
SU1608655A1 (ru) Устройство дл возведени в квадрат
SU451078A1 (ru) Устройство для сложения-вычитания двоичных чисел

Legal Events

Date Code Title Description
LAPS Cancellation because of no payment of annual fees