1. ホーム
  2. floating-point

[解決済み] 単精度浮動小数点演算と倍精度浮動小数点演算はどう違うのですか?

2022-04-16 15:28:08

質問

単精度浮動小数点演算と倍精度浮動小数点演算の違いは何ですか?

特にゲーム機に関連した実用的な用語に興味があります。例えば、NINTENDO64は64ビットプロセッサを搭載しているのか、もし搭載しているならば倍精度浮動小数点演算が可能だったということになるのでしょうか。PS3やXbox360は倍精度浮動小数点演算ができるのか、それとも単精度なのか、また一般的に倍精度機能は利用されているのか(もし利用されているとしたら)、などです。

どのように解決するのですか?

ニンテンドー64 ただし、64ビットプロセッサーを搭載しています。

<ブロッククオート

64ビットのデータ型ではより高いデータ精度が3Dゲームでは通常要求されないこと、また64ビットのデータ処理には2倍のRAM、キャッシュ、帯域幅を使用するため、システム全体のパフォーマンスが低下することから、多くのゲームでチップの32ビット処理モードが利用されました。

から ウェブペディア :

倍精度という言葉は、正確には倍ではないので、何か誤解があるようです。

倍精度という言葉は、倍精度数が通常の浮動小数点数の2倍のビットを使用することに由来している。

例えば、単精度の数値が32ビットであれば、倍精度の数値は64ビットの長さになる。

ビットが増えることで、精度だけでなく、表現できる大きさの範囲も広がる。

精度と大きさの範囲が増加する正確な量は、プログラムが浮動小数点値を表現するためにどのような形式を使用しているかに依存します。

ほとんどのコンピュータでは、IEEE浮動小数点形式と呼ばれる標準的な形式が使用されています。

IEEE倍精度のフォーマットは、実際には より 単精度の2倍以上の精度を持ち、範囲も非常に広い。

より 浮動小数点演算のIEEE規格

単精度

IEEE標準の単精度浮動小数点表現は、32ビットのワードを必要とし、0から31までの左から右への番号で表現することができる。

  • 最初のビットは 記号 ビット、Sです。
  • 次の8ビットは 指数 ビット、'E'、および
  • 最後の23ビットは 分数 'F':

    S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF
    0 1      8 9                    31
    
    

ワードが表す値Vは、次のように決定することができる。

  • E=255でFが0でない場合、V=NaN("Not a number" )となる。
  • E=255でFが0、Sが1の場合、V=∞となります。
  • E=255でFが0、Sが0の場合、V=Infinityとなる。
  • もし 0<E<255 では V=(-1)**S * 2 ** (E-127) * (1.F) ここで、"1.F" は は、Fをプレフィックスとする2進数を表すことを意図しています。 暗黙のうちに先頭に1、2進小数点をつける。
  • E=0でFが0でない場合 V=(-1)**S * 2 ** (-126) * (0.F) . これらは は、正規化されていない値である。
  • E=0、Fが0、Sが1の場合、V=-0となる。
  • E=0、F=0、S=0の場合、V=0となります。

特に

0 00000000 00000000000000000000000 = 0
1 00000000 00000000000000000000000 = -0

0 11111111 00000000000000000000000 = Infinity
1 11111111 00000000000000000000000 = -Infinity

0 11111111 00000100000000000000000 = NaN
1 11111111 00100010001001010101010 = NaN

0 10000000 00000000000000000000000 = +1 * 2**(128-127) * 1.0 = 2
0 10000001 10100000000000000000000 = +1 * 2**(129-127) * 1.101 = 6.5
1 10000001 10100000000000000000000 = -1 * 2**(129-127) * 1.101 = -6.5

0 00000001 00000000000000000000000 = +1 * 2**(1-127) * 1.0 = 2**(-126)
0 00000000 10000000000000000000000 = +1 * 2**(-126) * 0.1 = 2**(-127) 
0 00000000 00000000000000000000001 = +1 * 2**(-126) * 
                                     0.00000000000000000000001 = 
                                     2**(-149)  (Smallest positive value)

倍精度

IEEE倍精度浮動小数点標準表現では、64ビットのワードを必要とし、0から63までの左から右への番号で表現されることがあります。

  • 最初のビットは 記号 ビット、Sです。
  • 次の11ビットは 指数 ビット、'E'、および
  • であり、最後の52ビットは 分数 'F':

    S EEEEEEEEEEE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    0 1        11 12                                                63
    
    

ワードが表す値Vは、次のように決定することができる。

  • E=2047でFが0でない場合、V=NaN("Not a number" )となる。
  • E=2047でFが0、Sが1の場合、V=∞となります。
  • E=2047でFが0、Sが0の場合、V=Infinityとなる。
  • もし 0<E<2047 では V=(-1)**S * 2 ** (E-1023) * (1.F) ここで、"1.F" は は、Fをプレフィックスとする2進数を表すことを意図しています。 暗黙のうちに先頭に1、2進小数点をつける。
  • E=0でFが0でない場合 V=(-1)**S * 2 ** (-1022) * (0.F) これらは は正規化されていない値です。
  • E=0、Fが0、Sが1の場合、V=-0となります。
  • E=0、F=0、S=0の場合、V=0となります。

参考

ANSI/IEEE規格754-1985。

バイナリ浮動小数点演算の規格。