JP5966763B2 - 除算装置及び除算方法 - Google Patents

除算装置及び除算方法 Download PDF

Info

Publication number
JP5966763B2
JP5966763B2 JP2012183418A JP2012183418A JP5966763B2 JP 5966763 B2 JP5966763 B2 JP 5966763B2 JP 2012183418 A JP2012183418 A JP 2012183418A JP 2012183418 A JP2012183418 A JP 2012183418A JP 5966763 B2 JP5966763 B2 JP 5966763B2
Authority
JP
Japan
Prior art keywords
quotient
circuit
floating
division
value
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.)
Active
Application number
JP2012183418A
Other languages
English (en)
Other versions
JP2014041473A (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 JP2012183418A priority Critical patent/JP5966763B2/ja
Priority to US13/921,238 priority patent/US20140059096A1/en
Publication of JP2014041473A publication Critical patent/JP2014041473A/ja
Application granted granted Critical
Publication of JP5966763B2 publication Critical patent/JP5966763B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/01Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
    • G06F5/012Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising in floating-point computations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • G06F7/487Multiplying; Dividing
    • G06F7/4873Dividing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • G06F7/485Adding; Subtracting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • G06F7/487Multiplying; Dividing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/491Computations with decimal numbers radix 12 or 20.
    • G06F7/4915Multiplying; Dividing
    • G06F7/4917Dividing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49942Significance control
    • G06F7/49947Rounding
    • G06F7/49957Implementation of IEEE-754 Standard

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Nonlinear Science (AREA)
  • Complex Calculations (AREA)

Description

本発明は、除算装置及び除算方法に関する。
正規化された浮動小数点数の仮数部の除算を行うための除算回路を有する浮動小数点除算装置が知られている(例えば、特許文献1参照)。第1のゼロ検出回路は、被除数となる正規化浮動小数点数の仮数部または固定小数点数の上位に連続するゼロの数を検出する。第2のゼロ検出回路は、除数となる正規化浮動小数点数の仮数部または固定小数点数の上位に連続するゼロの数を検出する。第1の左シフト回路は、第1のゼロ検出回路によって検出されたゼロの数だけ被除数を左シフトして除算回路に供給する。第2の左シフト回路は、第2のゼロ検出回路によって検出されたゼロの数だけ除数を左シフトして除算回路に供給する。減算器は、第1及び第2のゼロ検出回路で検出されたゼロの数を減算する。シフト回路は、第1及び第2の左シフト回路による左シフト後の被除数及び除数を対象とする除算回路の除算結果を減算器の減算結果の示す数の絶対値だけその減算結果の正負に応じて右または左シフトする。
特開平5−40609号公報
特許文献1は、IEEE754の浮動小数点2進数形式のように非正規化数を正規化数に変換できるフォーマットの浮動小数点数の除算を行うことは可能である。しかし、特許文献1は、IEEE754−2008の浮動小数点10進数形式のように、元々正規化数が定義されていないフォーマットの浮動小数点の除算を行うことが困難である。
1つの側面では、本発明の目的は、IEEE754−2008の浮動小数点10進数形式のように、元々正規化数が定義されていない非正規化固定精度浮動小数点数の除算を行うことができる除算装置及び除算方法を提供することである。
除算装置は、被除数となる浮動小数点数の仮数部の上位に連続するゼロの数を計数する第1の計数回路と、除数となる浮動小数点数の仮数部の上位に連続するゼロの数を計数する第2の計数回路と、前記第1の計数回路が計数した第1の計数値だけ前記被除数の仮数部を左シフトする第1のシフト回路と、前記第2の計数回路が計数した第2の計数値だけ前記除数の仮数部を左シフトする第2のシフト回路と、前記第1の計数値及び前記第2の計数値を基に商の桁数予測値を演算する桁数演算回路と、前記第1のシフト回路により左シフトされた被除数の仮数部と、前記第2のシフト回路により左シフトされた除数の仮数部とを基に、桁単位で商及び剰余を順次出力する除算回路と、前記被除数となる浮動小数点数の指数部から前記除数となる浮動小数点の指数部を減算した値を出力する減算回路と、前記除算回路が出力する商の桁数が前記商の桁数予測値になり、かつ前記除算回路が出力する剰余がゼロになる場合、前記除算回路が出力する商を商の浮動小数点数の仮数部として出力し、前記減算回路により出力された値を商の浮動小数点数の指数部として出力する制御回路とを有する。
正規化数が定義されていない非正規化固定精度浮動小数点数の除算を行うことができる。
図1は、固定小数点数の除算方法を説明するための図である。 図2は、浮動小数点数の除算方法を説明するための図である。 図3は、正規化数が定義されていない非正規化固定精度浮動小数点数の除算方法を説明するための図である。 図4は、第1の実施形態による第1の除算方法を説明するための図である。 図5は、第1の実施形態による第2の除算方法を説明するための図である。 図6は、第1の実施形態による第3の除算方法を説明するための図である。 図7は、第1の実施形態による第4の除算方法を説明するための図である。 図8は、第1の実施形態による除算装置の構成例を示す図である。 図9は、図8の除算ループ回路の構成例を示す図である。 図10(A)〜(D)は、図8の制御回路の制御方法を示す図である。 図11は、第2の実施形態による除算装置の構成例を示す図である。 図12(A)〜(D)は、図11の制御回路の制御方法を示す図である。 図13は、第3の実施形態による除算装置の構成例を示す図である。 図14(A)及び(B)は、図13の制御回路の制御方法を示す図である。
(第1の実施形態)
図1は、固定小数点数の除算方法を説明するための図である。「001000」は、被除数となる固定小数点10進数である。「000030」は、除数となる固定小数点10進数である。第1のリーディングゼロカウント値P1は、被除数の「001000」の上位に連続するゼロの数であり、「2」である。第2のリーディングゼロカウント値P2は、除数の「000030」の上位に連続するゼロの数であり、「4」である。「1.00000」は、被除数の「001000」を第1のリーディングゼロカウント値P1の「2」だけ左シフトした正規化数である。「3.00000」は、除数の「000030」を第2のリーディングゼロカウント値P2の「4」だけ左シフトした正規化数である。「0.33333」は、被除数の正規化数の「1.00000」を除数の正規化数の「3.00000」で除算した商である。その右隣の値Pの「−2」は、P1−P2=2−4=−2で表される。商の「33.33330」は、商の「0.33333」を値Pの「−2」だけ右シフトした値である。商の出力OUT1は、「33」の固定小数点数である。「33」は、商の「33.33330」の整数部である。
図2は、浮動小数点数の除算方法を説明するための図である。浮動小数点数は、仮数部sf及び指数部expを有し、10進数の場合には、sf×10expで表される。被除数は、「0.01000」の仮数部及び「0」の指数部を有する。除数は、「0.00030」の仮数部及び「0」の指数部を有する。第1のリーディングゼロカウント値P1は、被除数の仮数部の「0.01000」の上位に連続するゼロの数であり、「2」である。第2のリーディングゼロカウント値P2は、除数の「0.00030」の上位に連続するゼロの数であり、「4」である。被除数の正規化仮数部の「1.00000」は、被除数の仮数部の「0.01000」を第1のリーディングゼロカウント値P1の「2」だけ左シフトした正規化数である。除数の正規化仮数部の「3.00000」は、除数の仮数部の「0.00030」を第2のリーディングゼロカウント値P2の「4」だけ左シフトした正規化数である。被除数の正規化指数部の「−2」は、被除数の指数部の「0」から第1のリーディングゼロカウント値P1の「2」を減算し、0−2=−2で表される。除数の正規化指数部の「−4」は、除数の指数部の「0」から第2のリーディングゼロカウント値P2の「4」を減算し、0−4=−4で表される。商の仮数部の「0.333333」は、被除数の正規化仮数部の「1.00000」を除数の正規化仮数部の「3.00000」で除算した商である。商の指数部の「2」は、被除数の正規化指数部の「−2」から除数の正規化指数部の「−4」を減算し、(−2)−(−4)=2で表される。その右隣の値Pの「−2」は、P1−P2=2−4=−2で表される。商の仮数部の「33.33330」は、商の仮数部の「0.333333」を値Pの「−2」だけ右シフトした値である。その右隣の指数部の「0」は、その上の指数部の「2」と値Pの「−2」を加算し、2+(−2)=0で表される。商の仮数部の「33.33330」及び指数部の「0」を正規化し、商の出力OUT2が得られる。商の出力OUT2は、「3.33333」の仮数部と「1」の指数部を有する。商の出力OUT2は、正規化数のフォーマットが定義されている規格の例を示すので、このような正規化数への変換が可能である。
図3は、IEEE754−2008の浮動小数点10進数形式のように、正規化数が定義されていない非正規化固定精度浮動小数点数の除算方法を説明するための図である。被除数は、「001000」の仮数部及び「0」の指数部を有する。除数は、「000030」の仮数部及び「0」の指数部を有する。第1のリーディングゼロカウント値P1は、被除数の仮数部の「001000」の上位に連続するゼロの数であり、「2」である。第2のリーディングゼロカウント値P2は、除数の仮数部の「000030」の上位に連続するゼロの数であり、「4」である。被除数の正規化仮数部の「1.00000」は、被除数の仮数部の「001000」を第1のリーディングゼロカウント値P1の「2」だけ左シフトした正規化数である。除数の正規化仮数部の「3.00000」は、除数の仮数部の「000030」を第2のリーディングゼロカウント値P2の「4」だけ左シフトした正規化数である。被除数の正規化指数部の「−2」は、被除数の指数部の「0」から第1のリーディングゼロカウント値P1の「2」を減算し、0−2=−2で表される。除数の正規化指数部の「−4」は、除数の指数部の「0」から第2のリーディングゼロカウント値P2の「4」を減算し、0−4=−4で表される。商の仮数部の「0.333333」は、被除数の正規化仮数部の「1.00000」を除数の正規化仮数部の「3.00000」で除算した商である。商の指数部の「2」は、被除数の正規化指数部の「−2」から除数の正規化指数部の「−4」を減算し、(−2)−(−4)=2で表される。その右隣の値Pの「−2」は、P1−P2=2−4=−2で表される。商の仮数部の「33.33330」は、商の仮数部の「0.333333」を値Pの「−2」だけ右シフトした値である。その右隣の指数部の「0」は、その上の指数部の「2」と値Pの「−2」を加算し、2+(−2)=0で表される。IEEE754−2008の浮動小数点10進数形式では、正規化数が定義されていないため、商の出力OUT3を決めることが困難であり、商の精度の低下を招く可能性がある。
図4は、第1の実施形態による第1の除算方法を説明するための図である。第1の除算方法では、非正規化固定精度浮動小数点数の除算を行う。被除数は、「001000」の仮数部及び「0」の指数部を有する。除数は、「000050」の仮数部及び「0」の指数部を有する。第1のリーディングゼロカウント値LZC1は、被除数の仮数部の「001000」の上位に連続するゼロの数であり、「2」である。第2のリーディングゼロカウント値LZC2は、除数の仮数部の「000050」の上位に連続するゼロの数であり、「4」である。被除数の正規化仮数部の「100000」は、被除数の仮数部の「001000」を第1のリーディングゼロカウント値LZC1の「2」だけ左シフトした正規化数である。除数の正規化仮数部の「500000」は、除数の仮数部の「000050」を第2のリーディングゼロカウント値LZC2の「4」だけ左シフトした正規化数である。商の桁数予測値DCは、LZC2−LZC1+1=4−2+1=「3」で表される。
次に、被除数の正規化仮数部の「100000」を除数の正規化仮数部の「500000」で除算した上位1桁目の部分商が「0」になる。部分商の指数部は、「0」のままである。商の桁数予測値DCは、デクリメントされ、「3」から「2」になる。上記の除算の中間剰余は0でないので、「N」になる。
次に、被除数の正規化仮数部の「100000」を除数の正規化仮数部の「500000」で除算した上位2桁目の部分商が「2」になる。上位1桁目の部分商の「0」を左シフトし、それに対して、上位2桁目の部分商の「2」を加算することにより、中間商は「「02」になる。中間商の指数部は、「0」のままである。商の桁数予測値DCは、デクリメントされ、「2」から「1」になる。上記の除算の中間剰余は0であるので、「Y」になる。
次に、被除数の正規化仮数部の「100000」を除数の正規化仮数部の「500000」で除算した上位3桁目の部分商が「0」になる。前回の中間商の「02」を左シフトし、それに対して、上位3桁目の部分商の「0」を加算することにより、中間商は「020」になる。中間商の指数部は、「0」のままである。商の桁数予測値DCは、デクリメントされ、「1」から「0」になる。上記の除算の中間剰余は0であるので、「Y」になる。
ここで、商の桁数予測値DCが0になり、かつ中間剰余が0になったので、商の出力OUT4が出力される。商の出力OUT4は、「20」の仮数部と「0」の指数部とを有する。
図5は、第1の実施形態による第2の除算方法を説明するための図である。第2の除算方法では、非正規化固定精度浮動小数点数の除算を行う。被除数は、「001000」の仮数部及び「0」の指数部を有する。除数は、「000032」の仮数部及び「0」の指数部を有する。第1のリーディングゼロカウント値LZC1は、被除数の仮数部の「001000」の上位に連続するゼロの数であり、「2」である。第2のリーディングゼロカウント値LZC2は、除数の仮数部の「000032」の上位に連続するゼロの数であり、「4」である。被除数の正規化仮数部の「100000」は、被除数の仮数部の「001000」を第1のリーディングゼロカウント値LZC1の「2」だけ左シフトした正規化数である。除数の正規化仮数部の「320000」は、除数の仮数部の「000032」を第2のリーディングゼロカウント値LZC2の「4」だけ左シフトした正規化数である。商の桁数予測値DCは、LZC2−LZC1+1=4−2+1=「3」で表される。
次に、被除数の正規化仮数部の「100000」を除数の正規化仮数部の「320000」で除算した上位1桁目の部分商が「0」になる。部分商の指数部は、「0」のままである。商の桁数予測値DCは、デクリメントされ、「3」から「2」になる。上記の除算の中間剰余は0でないので、「N」になる。
次に、被除数の正規化仮数部の「100000」を除数の正規化仮数部の「320000」で除算した上位2桁目の部分商が「3」になる。上位1桁目の部分商の「0」を左シフトし、それに対して、上位2桁目の部分商の「3」を加算することにより、中間商は「「03」になる。中間商の指数部は、「0」のままである。商の桁数予測値DCは、デクリメントされ、「2」から「1」になる。上記の除算の中間剰余は0でないので、「N」になる。
次に、被除数の正規化仮数部の「100000」を除数の正規化仮数部の「320000」で除算した上位3桁目の部分商が「1」になる。前回の中間商の「03」を左シフトし、それに対して、上位3桁目の部分商の「1」を加算することにより、中間商は「031」になる。中間商の指数部は、「0」のままである。商の桁数予測値DCは、デクリメントされ、「1」から「0」になる。上記の除算の中間剰余は0でないので、「N」になる。
ここで、商の桁数予測値DCが0になったが、中間剰余が0になっていない。この場合、商の桁数予測値DCの予測が外れたので、中間剰余が0になるまで、除算を続ける。
次に、被除数の正規化仮数部の「100000」を除数の正規化仮数部の「320000」で除算した上位4桁目の部分商が「2」になる。前回の中間商の「031」を左シフトし、それに対して、上位4桁目の部分商の「2」を加算することにより、中間商は「0312」になる。中間商の指数部は、デクリメントされ、「0」から「−1」になる。商の桁数予測値DCは、デクリメントされ、「0」から「−1」になる。上記の除算の中間剰余は0でないので、「N」になる。
次に、被除数の正規化仮数部の「100000」を除数の正規化仮数部の「320000」で除算した上位5桁目の部分商が「5」になる。前回の中間商の「0312」を左シフトし、それに対して、上位5桁目の部分商の「5」を加算することにより、中間商は「03125」になる。中間商の指数部は、デクリメントされ、「−1」から「−2」になる。商の桁数予測値DCは、デクリメントされ、「−1」から「−2」になる。上記の除算の中間剰余は0であるので、「Y」になる。
ここで、商の桁数予測値DCが0以下になり、かつ中間剰余が0になったので、商の出力OUT5が出力される。商の出力OUT5は、「3125」の仮数部と「−2」の指数部とを有する。
図6は、第1の実施形態による第3の除算方法を説明するための図である。第3の除算方法では、非正規化固定精度浮動小数点数の除算を行う。被除数は、「001000」の仮数部及び「0」の指数部を有する。除数は、「000030」の仮数部及び「0」の指数部を有する。第1のリーディングゼロカウント値LZC1は、被除数の仮数部の「001000」の上位に連続するゼロの数であり、「2」である。第2のリーディングゼロカウント値LZC2は、除数の仮数部の「000030」の上位に連続するゼロの数であり、「4」である。被除数の正規化仮数部の「100000」は、被除数の仮数部の「001000」を第1のリーディングゼロカウント値LZC1の「2」だけ左シフトした正規化数である。除数の正規化仮数部の「300000」は、除数の仮数部の「000030」を第2のリーディングゼロカウント値LZC2の「4」だけ左シフトした正規化数である。商の桁数予測値DCは、LZC2−LZC1+1=4−2+1=「3」で表される。
次に、被除数の正規化仮数部の「100000」を除数の正規化仮数部の「300000」で除算した上位1桁目の部分商が「0」になる。部分商の指数部は、「0」のままである。商の桁数予測値DCは、デクリメントされ、「3」から「2」になる。上記の除算の中間剰余は0でないので、「N」になる。
次に、被除数の正規化仮数部の「100000」を除数の正規化仮数部の「300000」で除算した上位2桁目の部分商が「3」になる。上位1桁目の部分商の「0」を左シフトし、それに対して、上位2桁目の部分商の「3」を加算することにより、中間商は「「03」になる。中間商の指数部は、「0」のままである。商の桁数予測値DCは、デクリメントされ、「2」から「1」になる。上記の除算の中間剰余は0でないので、「N」になる。
次に、被除数の正規化仮数部の「100000」を除数の正規化仮数部の「300000」で除算した上位3桁目の部分商が「3」になる。前回の中間商の「03」を左シフトし、それに対して、上位3桁目の部分商の「3」を加算することにより、中間商は「033」になる。中間商の指数部は、「0」のままである。商の桁数予測値DCは、デクリメントされ、「1」から「0」になる。上記の除算の中間剰余は0でないので、「N」になる。
ここで、商の桁数予測値DCが0になったが、中間剰余が0になっていない。この場合、商の桁数予測値DCの予測が外れたので、中間剰余が0になるまで、除算を続ける。
次に、被除数の正規化仮数部の「100000」を除数の正規化仮数部の「300000」で除算した上位4桁目の部分商が「3」になる。前回の中間商の「033」を左シフトし、それに対して、上位4桁目の部分商の「3」を加算することにより、中間商は「0333」になる。中間商の指数部は、デクリメントされ、「0」から「−1」になる。商の桁数予測値DCは、デクリメントされ、「0」から「−1」になる。上記の除算の中間剰余は0でないので、「N」になる。
次に、被除数の正規化仮数部の「100000」を除数の正規化仮数部の「300000」で除算した上位5桁目の部分商が「3」になる。前回の中間商の「0333」を左シフトし、それに対して、上位5桁目の部分商の「3」を加算することにより、中間商は「03333」になる。中間商の指数部は、デクリメントされ、「−1」から「−2」になる。商の桁数予測値DCは、デクリメントされ、「−1」から「−2」になる。上記の除算の中間剰余は0でないので、「N」になる。
次に、被除数の正規化仮数部の「100000」を除数の正規化仮数部の「300000」で除算した上位6桁目の部分商が「3」になる。前回の中間商の「03333」を左シフトし、それに対して、上位6桁目の部分商の「3」を加算することにより、中間商は「033333」になる。中間商の指数部は、デクリメントされ、「−2」から「−3」になる。商の桁数予測値DCは、デクリメントされ、「−2」から「−3」になる。上記の除算の中間剰余は0でないので、「N」になる。
ここで、商の固定精度の桁数は、6であるとする。中間商の「033333」は、固定精度の6桁に達し、かつ中間剰余が0でないことになる。ただし、中間商の「033333」は、最上位桁が「0」である。この場合、最上位桁の「0」を削除しても、その値は変わらないので、除算を続ける。
次に、被除数の正規化仮数部の「100000」を除数の正規化仮数部の「300000」で除算した上位7桁目の部分商が「3」になる。前回の中間商の「033333」を左シフトし、それに対して、上位7桁目の部分商の「3」を加算することにより、固定精度6桁の中間商は「333333」になる。中間商の指数部は、デクリメントされ、「−3」から「−4」になる。商の桁数予測値DCは、デクリメントされ、「−3」から「−4」になる。上記の除算の中間剰余は0でないので、「N」になる。
ここで、固定精度6桁の中間商の「333333」は、固定精度の6桁に達し、かつ中間剰余が0でないことになる。中間商の「333333」は、最上位桁が「3」であり、「0」ではない。この場合、丸め処理のため、被除数の正規化仮数部の「100000」を除数の正規化仮数部の「300000」で除算した上位8桁目の部分商の「3」を演算する。そして、商の出力OUT6が出力される。商の出力OUT6は、仮数部の「333333」と、丸め処理のための上位8桁目の部分商の「3」と、指数部の「−4」とを有する。次に、丸め処理により、例えば、上位8桁目の部分商の「3」が四捨五入され、「333333」の仮数部と「−4」の指数部とを有する商が出力される。
図7は、第1の実施形態による第4の除算方法を説明するための図である。第4の除算方法では、非正規化固定精度浮動小数点数の除算を行う。被除数は、「000010」の仮数部及び「0」の指数部を有する。除数は、「003200」の仮数部及び「0」の指数部を有する。第1のリーディングゼロカウント値LZC1は、被除数の仮数部の「000010」の上位に連続するゼロの数であり、「4」である。第2のリーディングゼロカウント値LZC2は、除数の仮数部の「003200」の上位に連続するゼロの数であり、「2」である。被除数の正規化仮数部の「100000」は、被除数の仮数部の「000010」を第1のリーディングゼロカウント値LZC1の「4」だけ左シフトした正規化数である。除数の正規化仮数部の「320000」は、除数の仮数部の「003200」を第2のリーディングゼロカウント値LZC2の「2」だけ左シフトした正規化数である。商の桁数予測値DCは、LZC2−LZC1+1=2−4+1=「−1」で表される。
ここで、商の桁数予測値DCがゼロより小さいので、中間剰余が0になるまで、除算を続ける。
次に、被除数の正規化仮数部の「100000」を除数の正規化仮数部の「320000」で除算した上位1桁目の部分商が「0」になる。部分商の指数部は、デクリメントされ、「−1」から「−2」になる。商の桁数予測値DCは、デクリメントされ、「−1」から「−2」になる。上記の除算の中間剰余は0でないので、「N」になる。
次に、被除数の正規化仮数部の「100000」を除数の正規化仮数部の「320000」で除算した上位2桁目の部分商が「3」になる。上位1桁目の部分商の「0」を左シフトし、それに対して、上位2桁目の部分商の「3」を加算することにより、中間商は「「03」になる。中間商の指数部は、デクリメントされ、「−2」から「−3」になる。商の桁数予測値DCは、デクリメントされ、「−2」から「−3」になる。上記の除算の中間剰余は0でないので、「N」になる。
次に、被除数の正規化仮数部の「100000」を除数の正規化仮数部の「320000」で除算した上位3桁目の部分商が「1」になる。前回の中間商の「03」を左シフトし、それに対して、上位3桁目の部分商の「1」を加算することにより、中間商は「031」になる。中間商の指数部は、デクリメントされ、「−3」から「−4」になる。商の桁数予測値DCは、デクリメントされ、「−3」から「−4」になる。上記の除算の中間剰余は0でないので、「N」になる。
次に、被除数の正規化仮数部の「100000」を除数の正規化仮数部の「320000」で除算した上位4桁目の部分商が「2」になる。前回の中間商の「031」を左シフトし、それに対して、上位4桁目の部分商の「2」を加算することにより、中間商は「0312」になる。中間商の指数部は、デクリメントされ、「−4」から「−5」になる。商の桁数予測値DCは、デクリメントされ、「−4」から「−5」になる。上記の除算の中間剰余は0でないので、「N」になる。
次に、被除数の正規化仮数部の「100000」を除数の正規化仮数部の「320000」で除算した上位5桁目の部分商が「5」になる。前回の中間商の「0312」を左シフトし、それに対して、上位5桁目の部分商の「5」を加算することにより、中間商は「03125」になる。中間商の指数部は、デクリメントされ、「−5」から「−6」になる。商の桁数予測値DCは、デクリメントされ、「−5」から「−6」になる。上記の除算の中間剰余は0であるので、「Y」になる。
ここで、商の桁数予測値DCが0以下になり、かつ中間剰余が0になったので、商の出力OUT7が出力される。商の出力OUT7は、「3125」の仮数部と「−6」の指数部とを有する。
図8は、第1の実施形態による除算装置の構成例を示す図である。この除算装置は、上記の図4〜図7の除算を行うことができる。被除数となる浮動小数点数は、正負符号sg1と、仮数部sf1と、指数部exp1とを有し、10進数の場合には、(−1)sg1×sf1×10exp1で表される。除数となる浮動小数点数は、正負符号sg2と、仮数部sf2と、指数部exp2とを有し、10進数の場合には、(−1)sg2×sf2×10exp2で表される。正負符号sg1及びsg2は、「0」が正を表し、「1」が負を表す。
排他的論理和回路801は、正負符号演算回路であり、被除数の正負符号sg1と除数の正負符号sg2との排他的論理和値を正負符号sg0として出力する。すなわち、排他的論理和回路801は、被除数となる浮動小数点数の正負符号sg1及び除数となる浮動小数点数の正負符号sg2を入力し、両者の正負符号が同じであれば、商の浮動小数点数の正負符号sg0を正(値「0」)として出力し、両者の正負符号が異なれば、商の浮動小数点数の正負符号sg0を負(値「1」)として出力する。レジスタ802は、正負符号sg0を保持し、その正負符号sg0を商の浮動小数点数の正負符号sgとして出力する。
減算回路807は、被除数となる浮動小数点数の指数部exp1から除数となる浮動小数点の指数部exp2を減算した値exp0(=exp1−exp2)を出力する。
第1のリーディングゼロカウント回路803は、被除数となる浮動小数点数の仮数部sf1の上位に連続するゼロの数を第1のリーディングゼロカウント値LZC1としてカウントする。第2のリーディングゼロカウント回路804は、除数となる浮動小数点数の仮数部sf2の上位に連続するゼロの数を第2のリーディングゼロカウント値LZC2としてカウントする。
第1の左シフト回路805は、第1のリーディングゼロカウント値LZC1だけ被除数の仮数部sf1を左シフトし、被除数の正規化仮数部sft1を出力する。第2の左シフト回路806は、第2のリーディングゼロカウント値LZC2だけ除数の仮数部sf2を左シフトし、除数の正規化仮数部sft2を出力する。
桁数演算回路808は、第2のリーディングカウント値LZC2に対して第1のリーディングカウント値LZC1を減算して1を加算した値を商の桁数予測値DC(=LZC2−LZC1+1)として演算し、キャリーアウトcoを出力する。キャリーアウトcoは、商の桁数予測値DCがゼロ以上である場合には「1」になり、商の桁数予測値DCが負値である場合には「0」になる。
加算回路809は、値exp0及び商の桁数予測値DCを加算し、値exp0+DCを出力する。セレクタ810は、キャリーアウトcoが「1」である場合には、値exp0を選択して出力し、キャリーアウトcoが「0」である場合(例えば図7の場合)には、値exp0+DCを選択して出力する。
デクリメント回路811は、レジスタ813の出力値expをデクリメントし、値exp−1を出力する。セレクタ812は、初回の部分商の除算では、セレクタ810の出力値を選択して出力し、2回目以降の部分商の除算では、デクリメント回路811の出力値を選択して出力する。レジスタ813の値は、制御回路824が出力するレジスタ更新切り替え信号ext等に応じて、セレクタ812の出力値に更新され、商の浮動小数点数の指数部expとして出力される。
デクリメント回路814は、レジスタ818の出力値DC0をデクリメントし、値DC0−1を出力する。セレクタ815は、初回の部分商の除算では、商の桁数予測値DCを選択して出力し、2回目以降の部分商の除算では、デクリメント回路814の出力値を選択して出力する。レジスタ818の値は、後述する条件で、セレクタ815の出力値に更新され、値DC0として出力される。
除算ループ回路(除算回路)816は、被除数の正規化仮数部sft1と、除数の正規化仮数部sft2とを基に、桁単位で商pq及び剰余allzを順次出力する。
図9は、図8の除算ループ回路816の構成例を示す図である。以下、除算ループ回路816の一例を示すが、種々の構成を採用することができる。セレクタ900は、初回の部分商の除算では、被除数の正規化仮数部sft1を選択して出力し、2回目以降の部分商の除算では、セレクタ907の出力値を選択して出力する。レジスタ901の値は、レジスタ906の出力値allzに応じて、セレクタ900の出力値に更新され、被除数の仮数部SFT1として出力される。レジスタ902は、除数の正規化仮数部sft2を記憶し、仮数部sft2を出力する。
減算回路904は、除数の仮数部sft2から被除数の仮数部SFT1を減算した値を中間剰余SFT(=sft2−SFT1)として出力し、キャリーアウトcoを出力する。キャリーアウトcoは、中間剰余SFTがゼロ以上であれば「1」になり、中間剰余SFTが負値であれば「0」になる。
左シフト回路905は、被除数の仮数部SFT1を1桁左シフトして出力する。セレクタ907は、キャリーアウトcoが「1」である場合には、中間剰余SFTを選択して出力し、キャリーアウトcoが「0」である場合には、左シフト回路905の出力値を選択して出力する。オールゼロ回路906は、値SFT1のすべての桁が0である場合には「1」のオールゼロ値allzを出力し、それ以外の場合には「0」のオールゼロ値allzを出力する。すなわち、オールゼロ値allzが「1」の場合、中間剰余SFT1が0であることを示す。オールゼロ値allzが「1」の場合、レジスタ901の値は、0であるので、更新されずに、0を維持する。
論理積(AND)回路908は、オールゼロ値allzの論理反転値とキャリーアウトcoとの論理積値を出力する。レジスタ903は、初期値が0であり、部分商pqを出力する。インクリメント回路909は、減算回路904が減算を行う毎に、部分商pqをインクリメントし、pq+1を出力する。セレクタ910は、論理積回路908の出力値が「0」である場合には、値「0」を選択して出力し、論理積回路908の出力値が「1」である場合には、インクリメント回路909の出力値を選択して出力する。レジスタ903は、セレクタ910の出力値を記憶し、部分商pqを出力する。
以上のように、減算回路904は、キャリーアウトcoが「1」であれば、減算ができたことになるので、セレクタ907は値SFTを選択し、セレクタ910はインクリメント回路909の出力値を選択する。ただし、オールゼロ値allzが「1」の場合、中間剰余SFT1がゼロであり、部分商の演算を止める必要があるので、セレクタ910は値「0」を選択する。これに対し、減算回路904は、キャリーアウトcoが「0」であれば、減算できなかったことになるので、その桁の部分商の導出は完了とし、セレクタ907は、左シフト回路905の出力値を選択し、セレクタ910は、値「0」を選択する。キャリーアウトcoは、値pqingとして出力される。
図8において、qレジスタ819の最下位桁には、除算ループ回路816の部分商pqが入力される。左シフト回路817は、qレジスタ819に保持される値を1桁左シフトして出力する。qレジスタ919は、上位桁に、左シフト回路817の出力値が入力され、最下位桁に、部分商pqが入力される。
gレジスタ820には、図6に示したように、丸め処理用の部分商pqが入力される。gレジスタ820は、除算ループが終了した段階で、中間剰余がゼロでない場合に、更新される。
sレジスタ821には、オールゼロ値allzの論理反転値が丸め処理用のスティッキービットとして入力される。sレジスタ821は、除算ループが終了した段階で中間剰余がゼロでない場合に、更新される。オールゼロレジスタ822には、オールゼロ値allzが入力される。
レジスタ813,818〜822は、1桁の部分商が算出される毎に更新される。すなわち、除算ループ回路816から出力される信号pqingが「1」の間は、レジスタ813,818〜822の値の更新が停止され、信号pqingが「0」になると、レジスタ813,818〜822の値が更新される。
図10(A)〜(D)は、図8の制御回路824の制御方法を示す図である。制御回路824は、レジスタ818の出力値DC0と、qレジスタ819の最上位桁と、オールゼロレジスタ822の出力値allzとを入力し、レジスタ更新切り替え信号extを出力する。
図10(A)は、制御回路824が除算ループ終了条件を満たすか否かの判定方法を示す図である。レジスタ819の中間商の最上位桁が「0」である場合には、商の桁数予測値DC0が0以下であり、かつオールゼロ値allzが1である場合に、制御回路824は、除算ループ終了条件を満たすと判定する。また、レジスタ819の中間商の最上位桁が「1」〜「9」である場合には、図6に示したように、中間商が固定精度の桁数に達したので、制御回路824は、除算ループ終了条件を満たすと判定する。
図10(B)は、制御回路824が出力するレジスタ更新切り替え信号extを説明するための図である。図10(A)の除算ループ終了条件を満たし、かつオールゼロ値allzが「0」である場合には、制御回路824は「1」の信号extを出力し、それ以外の場合には、制御回路824は「0」の信号extを出力する。すなわち、図6に示したように、レジスタ819の中間商の最上位桁が「1」〜「9」であり、かつオールゼロ値allzが「0」である場合に、信号extが「1」になる。
図10(C)は、レジスタ802,813,818〜822の更新停止条件を示す図である。正負符号sgのレジスタ802は、初回の部分商の除算の時に更新され、2回目以降の部分商の除算の時には更新が停止される。指数部expのレジスタ813は、桁数予測値DC0がゼロ以上、又は、値pqingが「1」、又は、信号extが「1」の場合に、更新が停止される。桁数予測値DC0のレジスタ818は、値pqingが「1」の場合に、更新が停止される。qレジスタ819は、値pqingが「1」、又は、信号extが「1」の場合に、更新が停止される。gレジスタ820は、値pqingが「1」、又は、信号extが「0」の場合に、更新が停止される。sレジスタ821は、値pqingが「1」、又は、信号extが「0」の場合に、更新が停止される。レジスタ802,813,818〜822は、上記の更新停止条件を満たさない場合には更新される。
図10(D)は、丸め処理回路823の処理例を示す図である。制御回路824は、丸めモードに応じて、丸め処理回路823を制御する。丸め処理回路823は、レジスタ802の正負符号sgと、qレジスタ819の中間商と、gレジスタ820の部分商と、sレジスタ821のスティッキービットとを入力し、丸め処理を行い、商の浮動小数点数の仮数部sfを出力する。
まず、丸めモードが「0」の場合を説明する。この丸めモードでは、丸め処理回路823は、銀行家丸めと呼ばれている丸め処理を行う。qレジスタ819の中間商の最下位ビットが「1」である場合(中間商が奇数である場合)、gレジスタ820の部分商が「5」であり、かつsレジスタ821のスティッキービットが「0」である場合には、qレジスタ819の中間商に1を加算し、商の仮数部sfを出力する。例えば、「3.5」は、丸め処理により「4」になる。また、gレジスタ820の部分商が「5」であり、かつsレジスタ821のスティッキービットが「1」である場合には、丸め処理回路823は、qレジスタ819の中間商に1を加算し、商の仮数部sfを出力する。例えば、「2.51」は、丸め処理により「3」になる。また、gレジスタ820の部分商が「6」〜「9」である場合には、qレジスタ819の中間商に1を加算し、商の仮数部sfを出力する。例えば、「2.6」は、丸め処理により「3」になる。
次に、丸めモードが「1」の場合を説明する。この丸めモードでは、丸め処理回路823は、切り捨ての丸め処理を行う。丸め処理回路823は、qレジスタ819の中間商をそのまま仮数部sfとして出力する。
次に、丸めモードが「2」の場合を説明する。この丸めモードでは、丸め処理回路823は、+∞の方向に丸め処理を行う。正負符号sgが「0」であり、かつgレジスタ820の部分商が「1」〜「9」の場合には、丸め処理回路823は、qレジスタ819の中間商に1を加算し、商の仮数部sfを出力する。また、正負符号sgが「0」であり、かつsレジスタ821のスティッキービットが「1」の場合には、丸め処理回路823は、qレジスタ819の中間商に1を加算し、商の仮数部sfを出力する。
次に、丸めモードが「3」の場合を説明する。この丸めモードでは、丸め処理回路823は、−∞の方向に丸め処理を行う。正負符号sgが「1」であり、かつgレジスタ820の部分商が「1」〜「9」の場合には、丸め処理回路823は、qレジスタ819の中間商に1を加算し、商の仮数部sfを出力する。また、正負符号sgが「1」であり、かつsレジスタ821のスティッキービットが「1」の場合には、丸め処理回路823は、qレジスタ819の中間商に1を加算し、商の仮数部sfを出力する。
次に、丸めモードが「4」の場合を説明する。この丸めモードでは、丸め処理回路823は、四捨五入の丸め処理を行う。gレジスタ820の部分商が「5」〜「9」の場合には、丸め処理回路823は、qレジスタ819の中間商に1を加算し、商の仮数部sfを出力する。
なお、丸め処理が必要ない場合、gレジスタ820及びsレジスタ821の更新処理をスキップし、丸め処理回路823は、丸め処理を行わずに、qレジスタ819の中間商を仮数部sfとして出力してもよい。
以上の処理により、除算装置は、正負符号sgと、指数部expと、仮数部sfとを含む浮動小数点数の商を出力する。
図4の場合、制御回路824は、qレジスタ819の中間商の桁数が商の桁数予測値DCになり(桁数予測値DC0が0になり)、かつ除算ループ回路816が出力する中間剰余がゼロになった場合(オールゼロ値allzが1になった場合)には、qレジスタ819の中間商を商の浮動小数点数の仮数部sfとして出力し、減算回路807により出力された値exp0を商の浮動小数点数の指数部expとして出力する。
また、図5の場合、制御回路824は、qレジスタ819の中間商の桁数が商の桁数予測値DCになり(桁数予測値DC0が0になり)、かつ除算ループ回路816が出力する中間剰余がゼロでない場合(オールゼロ値allzが0の場合)には、除算ループ回路816が出力する中間剰余がゼロになるまで(オールゼロ値allzが1になるまで)、除算ループ回路816に桁単位の部分商pq及び中間剰余を出力させ続け、除算ループ回路816が出力する剰余がゼロになった場合(オールゼロ値allzが1になった場合)には、qレジスタ819の中間商を商の浮動小数点数の仮数部sfとして出力し、減算回路807により出力された値exp0から、qレジスタ819の中間商の桁数が商の桁数予測値DCを超えた値だけ減算した値を商の浮動小数点数の指数部expとして出力する。
また、図6の場合、丸め処理回路823は、qレジスタ819の中間商の桁数が固定精度の桁数になり、かつ除算ループ回路816が出力する剰余がゼロでない場合(オールゼロ値allzが0の場合)には、qレジスタ819の中間商に対して丸め処理を行い、その丸め処理した商を商の浮動小数点数の仮数部sfとして出力する。
また、図7の場合、制御回路824は、商の桁数予測値DCがゼロより小さい場合には、減算回路807により出力された値exp0に対して商の桁数予測値DCを加算した値を演算し、その加算した値から、qレジスタ819の中間商の桁数だけ減算した値を商の浮動小数点数の指数部expとして出力する。
本実施形態によれば、非正規化固定精度浮動小数点数の除算を行うことができる。また、デクリメント回路811による指数部expの補正を除算ループ動作と並行して行うので、除算ループが終わった後に指数部expの補正のためのオーバーヘッドが発生しない。また、除算ループ回路816の部分商の算出のアルゴリズムは問わないので、既存の除算ループ回路816を利用することが可能である。
(第2の実施形態)
図11は、第2の実施形態による除算装置の構成例を示す図である。図11の除算装置は、図8の除算装置に対して、セレクタ1101、デクリメント回路1102及びレジスタ1103を追加したものである。以下、本実施形態が第1の実施形態と異なる点を説明する。
本実施形態は、64ビットのIEEE754−2008の浮動小数点10進数形式を入出力フォーマットとした固定レイテンシ除算装置である。レジスタ1103は、カウント値LCを保持する。デクリメント回路1102は、レジスタ1103のカウント値LCをデクリメントし、LC−1を出力する。セレクタ1101には、仮数部sf1及びsf2の桁数(例えば「16」)が入力される。桁数「16」は、固定レイテンシのカウント値である。セレクタ1101は、初回の部分商の除算では、初期値「16」を選択して出力し、2回目以降の部分商の除算では、デクリメント回路1102の出力値を選択して出力する。レジスタ1103は、セレクタ1101の出力値を保持する。レジスタ1103のカウント値LCは、制御回路824に出力される。制御回路824は、レジスタ818の出力値DC0と、qレジスタ819の最上位桁と、オールゼロレジスタ822の出力値allzと、レジスタ1103のカウント値LCとを入力し、レジスタ更新切り替え信号ext及びレジスタ更新停止信号stpを出力する。
レジスタ1103は、レジスタ813,818〜822と同様に、1桁の部分商が算出される毎に更新される。すなわち、値pqing信号が「1」の間は、レジスタ1103は更新が停止され、値pqingが「0」になると、レジスタ1103は更新される。
図12(A)〜(D)は、図11の制御回路824の制御方法を示す図である。図12(A)は、制御回路824が除算ループ終了条件を満たすか否かの判定方法を示す図である。レジスタ1103のカウント値LCが0以下である場合には、制御回路824は、除算ループ終了条件を満たすと判定する。
図12(B)は、制御回路824が出力するレジスタ更新停止信号stpを説明するための図である。qレジスタ819の中間商の最上位桁が「0」である場合には、商の桁数予測値DC0が0以下であり、かつオールゼロ値allzが1である場合に、制御回路824は、「1」のレジスタ更新停止信号stpを出力する。また、レジスタ819の中間商の最上位桁が「1」〜「9」である場合には、図6に示したように、中間商が固定精度の桁数に達したので、制御回路824は、「1」のレジスタ更新停止信号stpを出力する。レジスタ更新停止信号stpが「1」になると、レジスタ813及び819の値の更新が停止される。
図12(C)は、制御回路824が出力するレジスタ更新切り替え信号extを説明するための図である。図12(A)の除算ループ終了条件を満たし、かつオールゼロ値allzが「0」である場合には、制御回路824は「1」の信号extを出力し、それ以外の場合には、制御回路824は「0」の信号extを出力する。すなわち、図6に示したように、レジスタ819の中間商の最上位桁が「1」〜「9」であり、かつオールゼロ値allzが「0」である場合に、信号extが「1」になる。
図12(D)は、レジスタ802,813,818〜822,1103の更新停止条件を示す図である。レジスタ802,813,818〜822は、図10(C)の更新停止条件と同様である。カウント値LCのレジスタ1103は、値pqingが「1」の場合に、更新が停止され、それ以外の場合には更新される。
以上のように、制御回路824は、固定レイテンシのカウント値LC(初期値が「16」)をカウント後に、商の浮動小数点数の仮数部sf及び指数部expを出力する。第1の実施形態の除算装置は、被除数及び除数を入力してから商を出力するまでの時間が、被除数及び除数に応じて可変となる可変レイテンシである。これに対し、本実施形態の除算装置は、被除数及び除数によらず、被除数及び除数を入力してから商を出力するまでの時間が一定となる固定レイテンシである。これにより、除算装置の後段の回路の処理が容易になる。
(第3の実施形態)
図13は、第3の実施形態による除算装置の構成例を示す図である。図13の除算装置は、図8の除算装置に対して、小数点数モード信号MDを追加したものである。以下、本実施形態が第1の実施形態と異なる点を説明する。
小数点数モード信号MDは、制御回路824に入力される。制御回路824は、レジスタ818の出力値DC0と、qレジスタ819の最上位桁と、オールゼロレジスタ822の出力値allzと、小数点数モード信号MDとを入力し、レジスタ更新切り替え信号extを出力する。本実施形態の除算装置は、小数点数モード信号MDを切り替えることにより、第1の実施形態の浮動小数点数の除算の他に、64ビットのBCD(二進化十進数:Binary-coded decimal)形式の固定小数点数の入出力フォーマットの除算を行うこともできる。
図14(A)及び(B)は、図13の制御回路824の制御方法を示す図である。図14(A)は、制御回路824が除算ループ終了条件を満たすか否かの判定方法を示す図である。
小数点数モード信号MDが「0」の場合、入出力フォーマットが浮動小数点数のモードになる。この場合、本実施形態の除算装置は、第1の実施形態の除算装置と同じ動作をする。すなわち、この場合の除算ループ終了条件は、図10(A)の除算ループ終了条件と同じである。
小数点数モード信号MDが「1」の場合、入出力フォーマットが固定小数点数のモードになる。この場合、除算装置は、被除数の固定小数点数及び除数の固定小数点数を入力し、商の固定小数点数を出力する。具体的には、第1のリーディングゼロカウント回路803及び第1の左シフト回路805は、被除数の仮数部sf1の代わりに被除数の固定小数点数を入力する。第2のリーディングゼロカウント回路804及び第2の左シフト回路806は、除数の仮数部sf2の代わりに除数の固定小数点数を入力する。丸め処理回路823は、商の仮数部sfの代わりに商の固定小数点数を出力する。なお、正負符号sg1,sg2及び指数部exp1,exp2の入力はない。この場合、商の桁数予測値DC0が0以下である場合に、制御回路824は、除算ループ終了条件を満たすと判定する。
図14(B)は、制御回路824が出力するレジスタ更新切り替え信号extを説明するための図である。図14(A)の除算ループ終了条件を満たし、かつ小数点数モード信号MDが0であり、かつオールゼロ値allzが「0」である場合には、制御回路824は「1」の信号extを出力し、それ以外の場合には、制御回路824は「0」の信号extを出力する。
以上のように、小数点数モード信号MDが固定小数点数モードの場合には、第1のリーディングゼロカウント回路803及び第1の左シフト回路805は、被除数の浮動小数点数の仮数部sf1の代わりに、被除数の固定小数点数を入力する。第2のリーディングゼロカウント回路804及び第2の左シフト回路806は、除数の浮動小数点数の仮数部sf2の代わりに、除数の固定小数点数を入力する。制御回路824は、商の浮動小数点数の仮数部sfの代わりに、商の固定小数点数を出力する。
本実施形態によれば、小数点数モード信号MDを0にすることにより、第1の実施形態のように浮動小数点数の除算を行い、小数点数モード信号MDを1にすることにより、固定小数点数の除算を行うことができる。
なお、第1〜第3の実施形態では、10進数の場合を例に説明したが、10進数に限定されない。
上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
801 排他的論理和回路
802,813,818〜822 レジスタ
803 第1のリーディングゼロカウント回路
804 第2のリーディングゼロカウント回路
805 第1の左シフト回路
806 第2の左シフト回路
807 減算回路
808 桁数演算回路
809 加算回路
810,812,815 セレクタ
811,814 デクリメント回路
816 除算ループ回路
817 左シフト回路
823 丸め処理回路
824 制御回路

Claims (9)

  1. 被除数となる浮動小数点数の仮数部の上位に連続するゼロの数を計数する第1の計数回路と、
    除数となる浮動小数点数の仮数部の上位に連続するゼロの数を計数する第2の計数回路と、
    前記第1の計数回路が計数した第1の計数値だけ前記被除数の仮数部を左シフトする第1のシフト回路と、
    前記第2の計数回路が計数した第2の計数値だけ前記除数の仮数部を左シフトする第2のシフト回路と、
    前記第1の計数値及び前記第2の計数値を基に商の桁数予測値を演算する桁数演算回路と、
    前記第1のシフト回路により左シフトされた被除数の仮数部と、前記第2のシフト回路により左シフトされた除数の仮数部とを基に、桁単位で商及び剰余を順次出力する除算回路と、
    前記被除数となる浮動小数点数の指数部から前記除数となる浮動小数点の指数部を減算した値を出力する減算回路と、
    前記除算回路が出力する商の桁数が前記商の桁数予測値になり、かつ前記除算回路が出力する剰余がゼロになる場合、前記除算回路が出力する商を商の浮動小数点数の仮数部として出力し、前記減算回路により出力された値を商の浮動小数点数の指数部として出力する制御回路と
    を有することを特徴とする除算装置。
  2. 前記制御回路は、前記除算回路が出力する商の桁数が前記商の桁数予測値になり、かつ前記除算回路が出力する剰余がゼロでない場合には、前記除算回路が出力する剰余がゼロになるまで、前記除算回路に桁単位の商及び剰余を出力させ続け、前記除算回路が出力する剰余がゼロになった場合には、前記除算回路が出力する商を商の浮動小数点数の仮数部として出力し、前記減算回路により出力された値から、前記商の桁数が前記商の桁数予測値を超えた値だけ減算した値を商の浮動小数点数の指数部として出力することを特徴とする請求項1記載の除算装置。
  3. さらに、前記除算回路が出力する商の桁数が固定精度の桁数になり、かつ前記除算回路が出力する剰余がゼロでない場合には、前記除算回路が出力する商に対して丸め処理を行い、前記丸め処理した商を商の浮動小数点数の仮数部として出力する丸め処理回路を有することを特徴とする請求項1又は2記載の除算装置。
  4. 前記制御回路は、前記商の桁数予測値がゼロより小さい場合には、前記減算回路により出力された値に対して前記商の桁数予測値を加算した値を演算し、前記加算した値から前記商の桁数だけ減算した値を商の浮動小数点数の指数部として出力することを特徴とする請求項1〜3のいずれか1項に記載の除算装置。
  5. さらに、前記被除数となる浮動小数点数の正負符号及び前記除数となる浮動小数点数の正負符号を入力し、両者の正負符号が同じであれば、商の浮動小数点数の正負符号を正として出力し、両者の正負符号が異なれば、商の浮動小数点数の正負符号を負として出力する正負符号演算回路を有することを特徴とする請求項1〜4のいずれか1項に記載の除算装置。
  6. 前記桁数演算回路は、前記第2の計数値に対して前記第1の計数値を減算して1を加算した値を前記商の桁数予測値として演算することを特徴とする請求項1〜5のいずれか1項に記載の除算装置。
  7. 前記制御回路は、固定レイテンシの計数値を計数後に、前記商の浮動小数点数の仮数部及び指数部を出力することを特徴とする請求項1〜6のいずれか1項に記載の除算装置。
  8. 固定小数点数モードでは、
    前記第1の計数回路及び前記第1のシフト回路は、前記被除数の浮動小数点数の仮数部の代わりに、被除数の固定小数点数を入力し、
    前記第2の計数回路及び前記第2のシフト回路は、前記除数の浮動小数点数の仮数部の代わりに、除数の固定小数点数を入力し、
    前記制御回路は、前記商の浮動小数点数の仮数部の代わりに、商の固定小数点数を出力することを特徴とする請求項1〜7のいずれか1項に記載の除算装置。
  9. 第1の計数回路が、被除数となる浮動小数点数の仮数部の上位に連続するゼロの数を計数し、
    第2の計数回路が、除数となる浮動小数点数の仮数部の上位に連続するゼロの数を計数し、
    第1のシフト回路が、前記第1の計数回路が計数した第1の計数値だけ前記被除数の仮数部を左シフトし、
    第2のシフト回路が、前記第2の計数回路が計数した第2の計数値だけ前記除数の仮数部を左シフトし、
    桁数演算回路が、前記第1の計数値及び前記第2の計数値を基に商の桁数予測値を演算し、
    除算回路が、前記第1のシフト回路により左シフトされた被除数の仮数部と、前記第2のシフト回路により左シフトされた除数の仮数部とを基に、桁単位で商及び剰余を順次出力し、
    減算回路が、前記被除数となる浮動小数点数の指数部から前記除数となる浮動小数点の指数部を減算した値を出力し、
    制御回路が、前記除算回路が出力する商の桁数が前記商の桁数予測値になり、かつ前記除算回路が出力する剰余がゼロになる場合には、前記除算回路が出力する商を商の浮動小数点数の仮数部として出力し、前記減算回路により出力された値を商の浮動小数点数の指数部として出力することを特徴とする除算方法。
JP2012183418A 2012-08-22 2012-08-22 除算装置及び除算方法 Active JP5966763B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2012183418A JP5966763B2 (ja) 2012-08-22 2012-08-22 除算装置及び除算方法
US13/921,238 US20140059096A1 (en) 2012-08-22 2013-06-19 Dividing device and dividing method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012183418A JP5966763B2 (ja) 2012-08-22 2012-08-22 除算装置及び除算方法

Publications (2)

Publication Number Publication Date
JP2014041473A JP2014041473A (ja) 2014-03-06
JP5966763B2 true JP5966763B2 (ja) 2016-08-10

Family

ID=50148982

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012183418A Active JP5966763B2 (ja) 2012-08-22 2012-08-22 除算装置及び除算方法

Country Status (2)

Country Link
US (1) US20140059096A1 (ja)
JP (1) JP5966763B2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9524143B2 (en) * 2014-06-26 2016-12-20 Arm Limited Apparatus and method for efficient division performance
US9753694B2 (en) 2015-04-21 2017-09-05 Qualcomm Incorporated Division and root computation with fast result formatting
US10127015B2 (en) 2016-09-30 2018-11-13 International Business Machines Corporation Decimal multiply and shift instruction
US10241757B2 (en) 2016-09-30 2019-03-26 International Business Machines Corporation Decimal shift and divide instruction
US10599396B2 (en) * 2017-03-03 2020-03-24 Continental Automotive Systems, Inc. Integer division circuit and method of performing integer division in hardware

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS56103740A (en) * 1980-01-23 1981-08-19 Toshiba Corp Decimal divider
JPH08147146A (ja) * 1994-11-24 1996-06-07 Fujitsu Ltd 除算演算装置
JP2001034472A (ja) * 1999-07-16 2001-02-09 Mitsubishi Electric Corp データ処理装置および除算、剰余算アルゴリズム
US7539720B2 (en) * 2004-12-15 2009-05-26 Sun Microsystems, Inc. Low latency integer divider and integration with floating point divider and method
US8452831B2 (en) * 2009-03-31 2013-05-28 Oracle America, Inc. Apparatus and method for implementing hardware support for denormalized operands for floating-point divide operations
JP5397061B2 (ja) * 2009-07-21 2014-01-22 富士通株式会社 演算処理装置、その制御方法および演算処理プログラム

Also Published As

Publication number Publication date
JP2014041473A (ja) 2014-03-06
US20140059096A1 (en) 2014-02-27

Similar Documents

Publication Publication Date Title
JP5966763B2 (ja) 除算装置及び除算方法
JP3541066B2 (ja) コンピュータにおいて除算および平方根計算を実施するための方法および装置
JP5996946B2 (ja) 浮動小数点加算器
CN107769791B (zh) 用于定点到浮点的转换的装置和方法及2的负幂检测器
CN105468331B (zh) 独立的浮点转换单元
JP4500358B2 (ja) 演算処理装置および演算処理方法
KR102318494B1 (ko) 곱셈 가산기
CN104520807A (zh) 用于具有指数按比例缩放的浮点融合乘法加法的微架构
US8751555B2 (en) Rounding unit for decimal floating-point division
KR100203468B1 (ko) 부동소수점수를 위한 산술연산장치
CN109901813B (zh) 一种浮点运算装置及方法
US20080288571A1 (en) Arithmetic device for performing division or square root operation of floating point number and arithmetic method therefor
JP2012221189A (ja) 演算回路、演算処理装置、及び演算回路の制御方法
CN108694037B (zh) 用于在执行浮点减法时估计移位量的装置和方法
US9851947B2 (en) Arithmetic processing method and arithmetic processor having improved fixed-point error
JP5966764B2 (ja) 乗算装置及び乗算方法
JPH10500513A (ja) ディジタル除算実行装置
CN108153513B (zh) 前导零预测
JP2558669B2 (ja) 浮動小数点演算装置
KR920003493B1 (ko) 부동 소숫점 표기를 기초로 하는 연산회로
JPH0283728A (ja) 浮動小数点乗算装置
JP2012221188A (ja) 演算回路、演算処理装置、及び演算回路の制御方法
EP3647939A1 (en) Arithmetic processing apparatus and controlling method therefor
JP2507183B2 (ja) 浮動小数点加減算装置
JP4428778B2 (ja) 演算装置及び演算方法並びに計算装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150512

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160530

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160607

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160620

R150 Certificate of patent or registration of utility model

Ref document number: 5966763

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150