27

私は、浮動小数点数とコンピューター処理の浮動小数点演算について多くのことを読んできました。それらについて読んでいるときに私が目にする最大の疑問は、なぜそれらがそれほど不正確なのかということです. これは、バイナリがすべての実数を正確に表すことができないためであることを理解しています。そのため、数値は「最良の」近似値に丸められます。

私の質問は、これを知っているのに、なぜ今でもコンピューター操作のベースとしてバイナリーを使用しているのですか? 確かに、2 より大きい基数を使用すると、浮動小数点演算の精度が指数関数的に向上しますね。

別の基数とは対照的に、コンピューターに 2 進数システムを使用する利点は何ですか? また、別の基数が試されたことはありますか? それとも可能ですか?

4

10 に答える 10

37

まず第一に、たとえば 100 を底とする場合でも、すべての実数を表すことはできません。とにかく、これは、「すべての実数を表すことができない」ため、不正確さが常に発生することを意味します。

ここで、「数学を行うときに、より高い基数がもたらすものは何ですか? について話しましょう。なんで?

基数 4 を使用する場合、基数 4 の 16 桁の数値は正確に 4 16の異なる値を提供します。

しかし、32 桁の 2 進数(2 32 = 4 16 )から同じ数の異なる値を取得できます

別の回答がすでに述べたように、トランジスタはオンまたはオフのいずれかになります。したがって、新しく設計されたベース 4 レジスタは、(ベース 2) ON/OFF 'ビット' を抽象化する必要があります。これは、次のことを意味します: 基数 4 の数字を表すために 2 つの「ビット」を使用します。ただし、N 'ビット' (または N/2 基数 4 桁) を使用することで、正確に 2 Nレベルを取得できます。ベースを増やすことではなく、より多くのビットを費やすことによってのみ精度を向上させることができます。数値を「想像/抽象化」する基数 (たとえば、これらの基数 2 の数値を基数 10 で出力する方法など) は、実際には抽象化の問題であり、精度ではありません。printf

于 2012-06-06T14:37:58.310 に答える
23

コンピュータは、「スイッチがオン」の状態と「スイッチがオフ」の状態を持つトランジスタで構築されています。高電圧、低電圧に対応しています。ほとんどすべてのデジタル集積回路は、このバイナリ形式で動作します。

トランジスタが単にこのように動作するという事実を無視すると、異なるベース (たとえばベース 3) を使用すると、これらの回路は中間電圧状態 (または複数) と 0V およびそれらの最高動作電圧で動作する必要があります。これはより複雑で、高周波で問題が発生する可能性があります。信号が 2V と 0V の間を遷移しているだけなのか、それとも実際には 1V で遷移しているのかをどのように判断できますか?

浮動小数点レベルに到達すると、(nhahtdh が回答で述べたように) 無限の数値空間を有限のストレージ空間にマッピングします。ある程度の精度が失われることは絶対に保証されています。ただし、IEEE 浮動小数点数の利点の 1 つは、精度が値の大きさに比例することです。

更新:三元コンピューター エミュレーターであるTunguskaもチェックしてください。基数 2 の代わりに基数 3 を使用しているため、いくつかの興味深い (気が遠くなるような) 概念が作成されます。

于 2012-06-06T14:24:36.647 に答える
12

基本的に、有限空間を実数の無限集合にマッピングしています。とにかく、それはベースの問題でもありません。

Polynomial が言ったように、2 レベルのエネルギーを区別する方が簡単であるため、実装上の理由から、基数 2 が選択されます。

より多くの数値を表す/精度を上げるために、より多くのスペースを投入するか、エンコードする範囲を制限するか、それらを組み合わせます。

于 2012-06-06T14:25:29.713 に答える
6

要するに、利用可能なチップ領域を最大限に活用することです。

オン/オフ スイッチを使用して数値を表す場合、基数 2 の表現よりもスイッチごとの精度を高めることはできません。これは単純に、選択した値に関係なく、N 個のスイッチが 2^N 個の数量を表すことができるためです。基数 16 の浮動小数点数を使用する初期のマシンがありましたが、これらはそれぞれ 4 バイナリ ビットを必要としたため、ビットあたりの全体的な精度は基数 2 と同じでした (実際には、特殊なケースのために多少低くなります)。

2 の累乗でない基数を選択すると、精度が明らかに失われます。たとえば、10 進数の 1 桁を表すには 4 ビットが必要ですが、これらの 4 ビットの使用可能な値のうち 6 つが使用されることはありません。このシステムは 2 進化 10 進数と呼ばれ、今でも時折、通常はお金の計算を行うときに使用されます。

マルチレベル ロジックは他のベースを効率的に実装できますが、少なくとも現在のチップ テクノロジでは、2 つ以上のレベルを実装するには非常にコストがかかることが判明しています。量子コンピューターでさえ、量子ビットまたは量子ビットという 2 つの量子レベルを想定して設計されています。

世界と数学の性質が、浮動小数点の状況を絶望的なものにしています。実数には、整数 -> 有理数 -> 代数 -> 超越という階層があります。ほとんどの数、つまり他のセットよりも「大きな無限」が超デンデンタルであるという素晴らしい数学的証明、カントール対角化があります。しかし、どの浮動小数点システムを選択しても、完全な表現のない低有理数(つまり、基数 10 の 1/3) は依然として存在します。これが私たちの宇宙です。どんなに巧妙なハードウェア設計をしても、それは変わりません。

ソフトウェアは、分子と分母を整数として格納する有理表現を使用できますし、実際に使用します。ただし、これらの場合、プログラマーの手は縛られています。たとえば、平方根は「閉じた」ものではありません。Sqrt(2) には有理表現がありません。

必要に応じてより多くの桁数を生成する、代数的表現と任意の実数の「怠惰な」表現に関する研究が行われています。このタイプの研究のほとんどは、計算幾何学にあるようです。

于 2012-06-06T15:29:37.950 に答える
6

あなたの最初の段落は理にかなっていますが、2 番目の段落は sequiter ではありません。ベースが大きくても、精度に違いはありません。

数値の精度は、使用されるストレージの量によって異なります。たとえば、16 ビットの 2 進数は 2 x 256 の基数と同じ精度を持ちます。どちらも同じ量の情報を使用します。

通常の浮動小数点リファレンスを参照してください。詳細については、すべてのベースに一般化されています。

はい、コンピューターは他の基数を使用して構築されています - 私は基数 10 (10 進数) を使用するものを知っていますwikipaediaを参照してください

于 2012-06-06T14:31:21.080 に答える
1

2 進浮動小数点数を使用して数学的実数を表すことから生じる問題が 2 つあります。おそらくもっと多くの問題がありますが、当面は 2 で十分です。

  1. すべてのコンピューター数値は有限であるため、無限の桁数を必要とする数値は、どのような基数が選択されていても、コンピューター上で正確に表すことはできません。つまり、pi、e、および他のほとんどの実数を扱います。
  2. どのような基数を選択しても、一部の分数を (有限に) 表現するのは困難です。基数 2 は、分母の係数が 3 の分数のみを近似できますが、基数 5 または基数 7 も同様です。

何年にもわたって、2 つ以上の状態を持つデバイスに基づく回路を備えたコンピューターが構築されてきました。旧ソビエト連邦は、3 ステート デバイスを備えた一連のコンピューターを開発しました。また、少なくとも 1 つの米国のコンピューター メーカーが、演算に 10 ステート デバイスを使用するコンピューターを提供していました。

バイナリ表現は (これまでのところ) 勝っていると思います。理由を説明することも、現在の電子デバイスで実装することも簡単だからです。

于 2012-06-06T14:31:19.137 に答える
1

I am not a EE, so everything I say below may be totally wrong. But...

The advantage of binary is that it maps very cleanly to distinguishing between on/off (or, more accurately, high/low voltage) states in real circuits. Trying to distinguish between multiple voltages would, I think, present a bit more of a challenge.

量子コンピューターが実験室から出れば、これは完全に窓の外に出るかもしれません。

于 2012-06-06T14:25:28.173 に答える
0

I vote that we move to a Rational number system storage. Two 32 bit intergers that will evaluate as p/q. Multiplication and division will be really cheap operations. Yeah there will be redundant evaluated numbers (1/2 = 2/4), but who really uses the full dynamic range of a 64 bit double anyways.

于 2012-06-06T15:08:19.610 に答える
-2

私は電気技師でも数学者でもないので、次の発言をするときはその点を考慮してください。

すべての浮動小数点数は整数として表すことができます。

于 2012-06-06T14:37:45.117 に答える