電腦會算錯數嗎?

人腦有時會算錯數,好奇一問,電腦也會算錯數嗎?

我的意思是,計算機在正常的配置和正常的情況下,計算1+1=2,但會不會有時候計算得到1+1=3?? 我意思是這種算錯。

補充:有不少答案把浮點數的舍入誤差也當成了錯誤。浮點數的舍入誤差,以及演算法的截斷誤差,都是程序設計中需要考慮的問題(數值計算相當一部分工作就是折騰這兩種誤差),所以這裡說的錯誤,不包含浮點數計算的誤差。


像我們這種民用cpu,動不動就3GHz的這種,在外太空運行,應該很容易觀測到因為計算機被各種輻射照射之後bit翻轉的情況。


會的,但是一般計算機都有冗餘系統可以糾正錯誤。


會,請看我的微博:http://weibo.com/1703560724/xtBDq8pbW?mod=weibotime

2.55*100為什麼不等於255?從業至今首次碰到浮點數誤差問題,請教中外倆.NET大牛無果後,果斷拍板決定「自己動手,豐衣足食」。究其原因,簡單地說:計算機將小數部分0.55轉換成二進位時會形成一個「0011」組合的無限循環,從而造成誤差。解決辦法是盡量用decimal類型替換double類型。基礎不能忘!


喲呵~ 在複習General來回答一下。

一般來說, 我們常說的「錯誤」有三種不同的東西:

Error: 計算結果和正常結果不相同(例如1+1=3), 原因可以有很多。

Fault: 不正確的步驟,規範(比如把浮點數認成整數), 導致計算機沒有按照想要的步驟運行。

Failure: 計算機無法進行(負擔)某些運算。(也即 「當機」)

我相信題主的問題可以表述為:計算機是否會出現Error ?

答案必然是會啊(要不然我說這干哈啊。。。)

原因有很多。 從最高層簡單說一下:

1. 軟體Bug, 這種歸為Fault/Failure類, 計算機本身計算完全正確, 但是走上了歧途。

2. 操作系統Bug,這種一般歸為Fault/Failure類, 和軟體Bug性質上類似。

以上情況均為控制系統的錯誤導致的結果錯誤。

3. 精度不足,這就是一個Error了。 類似 徐釀泉 所說的, 0.1+0.2由於精度不足得到了0.30....004的結果。 那麼假設我用這個數字的末位求一個指數, 結果就會出現很大的誤差。 所以一般的硬體計算中, 指數輸入端需要很好的處理精度問題, 比如說局部提高精度等。再就是避免使用這種容易出現精度誤差的位做放大計算。 本質上來說計算機算得數字都是近似值, 而設計者要確保近似值不會對結果產生影響。

4. 硬體Fault, 由於生產, 電壓等導致的問題使得硬體錯誤出現。 比如說某個結點無法變成邏輯1(Stuck-at-zero fault)或者無法變成邏輯0 (Stuck-at-one fault), 某兩個不相關結點短路, 某兩個相同結點斷路等, 都會導致以上問題。

4.1 外部條件導致的硬體問題: 比如說CPU溫度過高(&> 125 C), 使得某些門電路無法正常工作; 再比如太空粒子撞擊使得門電路從狀態0變為1 (Alpha粒子使得門電路端非正常被充電等)。 不一而足 。

總結: 計算機的「錯誤」其實在最最開始發明就有。 本質上計算機只是一個巨大的智能算盤, 代替人腦作出很多重複計算的工具。 如果使用不恰當, 作出了錯誤的近似或者估計, 那麼「算盤」自然不會給出你想要得答案。我們平時覺得計算機「不會出錯」, 本質上因為設計者對內部錯誤作出正確的處理而使得正確的近似結果被輸出。

(順帶留一個Food for Thought: CPU是如何處理1/0 這種運算的?)


你別說,我還真遇到過。

好幾年前了,一次去食堂吃飯,貌似是27.5的飯菜(飲料+套餐),給了三十,列印出來找我2.6。

小票大概是這麼寫的

套餐 xx

飲料 xx.5

=========

合計 27.5

收款 30

=========

找零 2.6

小夥伴表示驚呆了好么。。。。

跟收錢的阿姨說,她還不信,指著小票說:你看就是找你2.6啊。

跟她算了一下,她才意識到,跟我說謝謝收回了多找的一角錢。

本來想一直留著小票的,但是後來由於時間久遠早都已經沒字了。

越想越覺得神奇啊。。。


老師講他們公司翻版圖仿製Intel的386時發現了他們浮點數運算的bug.測試後果然是bug。


如果包括小數的話,計算機大多數時間都是錯的。


傳說中的丟精度~愚蠢的電腦星人23333

=======

剛剛看到題主補充了問題,既然不讓說精度那就換個梗:

0 bottles of beer on the wall,

0 bottles of beer!

take one down,

pass it around,

4,294,967,295 bottles of beer on the wall!

Quora 上看來的。


會的,一般都是由於設計原因或極端環境造成,比如intel的奔騰晶元就曾因設計問題導致浮點運算錯誤而收回,在太空中也會因為高能粒子干擾而出現錯誤。


硬體不總是完美無缺的。就算沒有宇宙射線,硬體也不一定就百分百正常工作。

程序員們還記得在項目中找到的最牛逼的一個 bug 是什麼?


計算機使用二進位,是使用電模擬信號,然後轉換為十進位(計數中),論上是不會錯的,但實際上他的計數全依賴於硬體。硬體的不完美必然造成他出錯的因素。


會的,你可以自己設計一個小的fpu,然後你就會發現你的fpu計算的時候會出現各式各樣的問題

或者乾脆從transistor level設計一個加法器,輸入信號改變的頻率太快自己就算錯了


打火機產生的千伏以上高壓可以讓你電腦奔潰。


1、我認為狹義的「計算機算錯了」應該只是硬體錯誤,只要計算機按照指令正確執行就不應該說有錯;

2、浮點運算精度問題應該只能算是瑕疵,是由本身硬體系統所決定的。但也可以通過一定的演算法避免、糾正這種「出錯」;

3、某些軟體演算法問題導致的錯誤就不要責怪計算機了,那是程序猿的問題。


幾率比較低,這個我遇到過。。。

我小學三年級的那一天我用計算器來算題,結果坑爹的是計算器居然把其中一道題給算錯了,他沒進位哈哈哈哈,兩位數乘一位數居然算錯了還好我媽媽贏了﹁︿﹁


推薦閱讀:

《高速M.2……三星960EVO 250GB簡測》
是時候對新卡做一波總結了
不聯網也不再安全——針對硬碟的聲波攻擊
下一代主機需要什麼樣的性能,才能讓普通用戶覺得畫面相比本世代有大幅提高?
6.18

TAG:數學 | 計算機 | 電腦硬體 | 科學 |