- 締切済み
計算機はなぜ計算間違いをしないか
電卓や表計算ソフトなどの計算機はなぜ計算間違いをすることがないのでしょうか?
- みんなの回答 (11)
- 専門家の回答
みんなの回答
- kmee
- ベストアンサー率55% (1857/3366)
何を「間違い」とするかです。 現在の計算機は二進数を基準にしています。その方が都合がいいからです。 まず、内部で値を表現する方法ですが、電気回路なので電気的な特性を利用します。 多いのは電圧です。 しかし、このときに、例えば「5を表現するのに5V」などとやってしまうと、さまざまな誤差要因によって、4.9だったり5.1だったりになってしまう場合があります(むしろ5.0になることの方が少ないでしょう) そこで、「高い電圧は1,低い電圧は0」とすると、1=5Vを設定しようとして4.9Vとか5.1Vとかになったとしても、「高い電圧」なので「1」と正しく判定できることになります。 これが、正しく計算できる理由の一つです。 扱うのは ・1項の演算 △A→C ・2項の演算 A○B→C だけです。3項以上の複雑な式も、2項ずつ演算していきます。 ※ここで、A,B,Cは一桁の二進数、○△は演算子 この2項の演算の結果は、16通りしかありません(A,Bの組合せは0,0/0,1/1,0/1,1の4通り。それぞれに対してのCが (0/0/0/0),(0/0/0/1),(0/0/1/0),....,(1/1/1/1)と、16通り) あとは、どんな複雑な計算でも、最終的に上の演算になるまで展開していくだけです。 その展開方法と、16通りの計算方法に間違いがなければ、正しく計算できます。これが理由の2です。 (さらに言えば、16通りの演算もさらに展開でき、最終的には一つの演算子だけで全ての演算が表現できます。つまり、一つの回路の組合せだけで全ての計算ができます) 次に誤差ですが、これは計算機が有限の値しか扱えない以上、どうしようもないことです。 しかし、これは「間違い」ではありません。 例えば、整数の演算を考えたときに 5÷3 = 1.666666...... となり、整数の範囲に収まりません。そこで「端数切り捨て」とか「四捨五入」とかルールを決めて値を求めます。 5÷3 = 1 (切り捨て) 5÷3 = 2 (四捨五入) これはこれで、ルールに従った正しい結果です。 真の値との差が「誤差」です。計算のルールが同じなら、誤差も同じです。 「計算間違い」というのは、そのルールと違う結果になることです。(切り捨てのはずなのに5÷3 = 2 になる、とか) 計算機はルールに従って演算するだけなので、誤差はあっても間違いはありません。 以上が理論的に計算間違いが無いことの説明です。 ところが、実際にはいろんな要因で間違うケースもあります。 回路を作るのは人間です。組合せを間違えてしまうこともあります。 どの演算を使うか、を制御するのがプログラムです。プログラムを作るのは人間です。間違えてしまうことがあります。 電気回路なので、当然、環境による特性変化があります。これにより、誤動作することがあります。(例えば、熱による抵抗値の変化:熱で抵抗が増える→電圧低下で1と見做せない電圧までさがってします→0と判定される、など) 製造段階の不具合によって、回路が正常動作しないこともあります(接触不良とか異物によるショートとか) ただ、これらは ・設計段階で防げるものは防ぐ(多少電圧が落ちてたりノイズが乗ったりしても正しく0/1判定できるようの回路にする、とか) ・出すまでに様々な方法でチェックしている(出荷前のテストとか) があるので、一般ユーザーが間違える計算機を持っていることはまずありません。
- pc-biginer-desu
- ベストアンサー率13% (3/22)
物理的に電子の動きを制御しているからでしょう。 情報を電子の動きであらわすものが計算機ですから ちゅうびんぐまちーん 野肥満型コンピュータがキーワードですな
お礼
ご回答ありがとうございます。
- bardfish
- ベストアンサー率28% (5029/17766)
それでは逆にお伺いします。 人間は何故間違いをするのでしょうか? それが理解でき、コンピューターの動きを少しでも理解できればおのずと答えは出てきます。
お礼
ご回答ありがとうございます。
補足
人間は計算の途中で寸前の計算を忘れてしまうというようなことがあるので今まさにやっている計算を間違えてしまうことがある、というようなことでしょうか? しかし計算機は後の計算に必要な計算結果などはメモリに残しておくので計算間違いをすることがない、というようなことでしょうか? そうであるとするならば、計算機が残しておかなくてはいけない計算結果をメモリに残すのを忘れてしまって後の計算を間違えてしまうというようなことが起きないのはなぜでしょうか?
「計算機が間違う」の定義を明確にして貰って良いですか?
お礼
ご回答ありがとうございます。
補足
数学の公理、定義に従って計算した場合に導かれる計算結果とは異なる計算結果を出力してしまうことがある。 例 1足す1と入力したのに2以外を出力してしまうことがある。
- Microstar
- ベストアンサー率21% (289/1367)
間違いの他に、計算していくうえでどうしても誤差が発生することがあります。 例えば、小数点以下の数字が終わらない場合は、どうしてもある位置で切り捨てるか四捨五入しますね。両方計算してみると、ずれる場合があります。その結果をどう見るかは計算させる人間側の問題です。
お礼
ご回答ありがとうございます。
補足
同じように処理する場合同じ計算であれば誤差も毎回同じでしょうか?
- TreatMeGently
- ベストアンサー率18% (27/147)
計算間違いしないように作ってあるからです。 ところで、PCのアクセサリーの電卓ですが、 普通の電卓では 1+2*3=とすると9と表示します。 関数電卓に変更して 1+2*3=とすると7と表示します。 そうなる様に作ってあるからです。
お礼
ご回答ありがとうございます。
補足
計算間違いしないように作れるのはなぜでしょうか?
- notnot
- ベストアンサー率47% (4900/10358)
「間違う」という能力が無いためですね。 もちろん、計算間違いをするようにプログラムされていれば、プログラム通りに計算間違いしますが。 実際には、温度上昇その他の原因で誤動作して計算間違いをすることはあります。ただし、誤動作した場合は計算間違い以上の状況・・・・停止とか固まる(無反応)とかになることが多いですが。
お礼
ご回答ありがとうございます。
補足
計算機がプログラム通りにしか動作しないのはなぜでしょうか? 温度上昇などした場合誤動作するのはなぜでしょうか?
- mimazoku_2
- ベストアンサー率20% (1905/9108)
計算間違いしますよ。 桁数制限で、難を逃れるように出来ています。 関数電卓や、表計算ソフトは、プログラムが修正されており、計算間違いが起こらないようになっています。 エクセルの場合数年前に特定の計算で誤差が出ることが判明(悪評が立った)して、マイクロソフトが修正しました。 ひょっとしたら、西暦2000年あたりの日付を用いれば、ミスを起こすかも?!
お礼
ご回答ありがとうございます。
補足
この場合の計算間違いとは同じ入力をしたにもかかわらず毎回異なる出力をするということでしょうか?
>しょせん人間が作ったものに過ぎません。 人間は、必ず間違いを犯します。 この場合、間違えたのは人間であって、計算機ではありません。
お礼
ご回答ありがとうございます。
- asuncion
- ベストアンサー率33% (2127/6289)
>計算機はなぜ計算間違いをすることがない 必ずしもそうとは言いきれないような気がします。 電卓の回路に組み込んである計算プログラムや 表計算ソフトのプログラムは、 しょせん人間が作ったものに過ぎません。 人間は、必ず間違いを犯します。
お礼
ご回答ありがとうございます。
- 1
- 2
お礼
ご回答ありがとうございます。