これがどのように計算されるかを理解しようとしています:
数値を次のように表すコンピューター プログラム。全体の符号は 1 ビット、指数は 5 ビット、仮数は 20 ビット。明らかに、正と負の数を表すためにバイアスを使用する必要があります。これに基づいて、マシンの精度と可能な最大数をどのように計算しますか?
これがどのように計算されるかを理解しようとしています:
数値を次のように表すコンピューター プログラム。全体の符号は 1 ビット、指数は 5 ビット、仮数は 20 ビット。明らかに、正と負の数を表すためにバイアスを使用する必要があります。これに基づいて、マシンの精度と可能な最大数をどのように計算しますか?
IEEE 標準を使用していると仮定すると、数値の表現式は次のようになります。
number = sign*(1+2^(-m)*significand)*2^(exponent-bias)
ここでm
は (整数) 仮数 (または仮数)を格納するために使用されるビット数であり、指数を格納するために使用されるビット数はどこにbias
等しいです。2^(e-1) - 1
e
そこから何を導き出せるか見てみましょう。ご了承ください
significand
間の範囲の値(あなたの場合: 0 から 1048575 の間)。0
2^m - 1
exponent
間の範囲の値。ただし、両方の極値は、非正規数と呼ばれる例外 (非正規数、無限、および NAN) 用に予約されています。0
2^e - 1
その結果、
(1+2^(-m)*significand)
は 1、最大値は2-2^(-m)
(あなたの場合は 2-2^(-20)、約 1,999999046) です。exponent-bias
は-2^(e-1)+2
(あなたの場合は -14)、最大は2^(e-1)-1
(あなたの場合: 15) です。したがって、次のことがわかります。
2^(-2^(e-1)+2)
(あなたの場合は2 ^(-14)、約0,000061035)です(2-2^(-m))*(2^(2^(e-1)-1))
(あなたの場合 (2-2^(-20))*(2^15)、約 65535,96875) です。「マシン精度」については、あなたが何を意味するのかわかりませんがm+1
、バイナリ精度 (ここでは 21) と呼ばれ、10 進数での精度はlog10(2^(m+1))
です。これは約 6.3 です。
私はこれについて専門家ではありません。