終于有人注意到這個問題了!
每個人的手機當中,都藏着一個難以察覺的“漏洞”。
它也許微不足道,但運氣不好,也可能會釀成财産損失。
嗯,就是前兩天上了熱搜的——
事情是這樣的……
機哥先問問大家一個簡單的計算題。
10% 10% =?
毫無疑問,答案是 20%。
如果用小數表示,也就是 0.2。
可據網友們反映,這道簡單的計算題,卻讓大部分品牌的手機陣亡。。
巧了,機哥啥都缺,唯獨不缺手機。
所以分别拿出主流品牌的手機,試了試。
結果如下:
華為
10% 10% = 0.11
小米
10% 10% = 0.11
OPPO
10% 10% = 0.11
vivo
10% 10% = 0.11
一加
10% 10% = 0.11
國産熱門品牌全線陣亡……我們來看看國外的廠商。
蘋果
10% 10% = 0.11
三星
10% 10% = 0.11
看來無論是國産,還是國外品牌,無一例外地栽了。。
真的無一幸免嗎?
當機哥絕望地把目光投到國産小廠,希望出現了。
魅族!
感動,這就叫極緻打磨啊朋友們。
除此之外,網友說另一家小廠商——錘子,也能通過這次考驗。
機哥拿出堅果 R1 試了一下。
錘子的計算機常規界面……并沒有 % 這個符号。
咱隻能切換到科學計算器上。
果然,它也算出了我們想要的答案。
10% 10% = 0.2
但是,普通計算器和科學計算器邏輯肯定會有不同,對比稍有點不公平。
OK,所以機哥今天,決定把“年度最佳計算器”的稱号……
頒給魅族!
不過,凡事咱們不能隻看表象。
手機廠商們齊刷刷“陣亡”,背後的原因到底是什麼?
其實拿小米做運算的時候,端倪就已顯現。
你們仔細看看機哥輸入的動作:
當機哥輸入第一個 10%,算式欄會直接把它轉化成 0.1。
可第二個 10%,卻被轉化成 0.01。
這麼一相加,結果當然是 0.11。
可問題是,計算器為什麼會把第二個 10% 識别為 0.01 呢。
其實稍微想想咱就能明白,計算器認為“ 10%”在人類的語境中,代表的是“加前一個數的 10%”。
所以盡管輸入的是10% 10%,計算器實際執行的是10% (10% x 10%)。
今天一早,小米産品總監@MIUI小凡,和榮耀總裁趙明,不約而同地在微博上解釋了這件事。
他們都有提到一個情境,可能會讓你更加理解這樣做的意義。
歐美那邊的餐廳,時常會有給小費的習慣。
假設機哥消費 200 塊錢,給 10% 小費,請問最後我該給多少錢?
如果按嚴謹的算術規則來寫,應該是:
這對于從小精通算術的中國人來說,沒毛病。
但對于那些算術稍弱的歐美人來說,就不是這樣了。
他們習慣于口語表達,200 塊,加 10%。
然後雙手跟着大腦,在鍵盤裡按下 200 10% 這樣的算式。
為了“遷就”他們,手機系統無論是安卓還是 iOS,都會把不嚴謹的算式自動轉化一番。
最後他們還是能得到正确答案 220。
OK,現在你們理解手機,為什麼會出 10% 10% = 0.11 這種問題了吧。
隻不過是套用了這個優化規則而已。
而轉換到科學計算器之後,部分品牌又恢複了理智。
比如小米:
話說,雖然這一話題最近才在國内引爆。
但國外有網友早在 2016 年,就對這件事産生過迷惑。
這位網友的質疑正好和我們相反
他覺得100 10%=100.1是錯的
而且,手機的計算器不是第一次出錯了。
2011 年,MIUI 論壇上出現過這樣一則帖子:
《【驚爆低級錯誤】Android 計算器出錯!!!》
這位網友在 HTC Desire 手機的計算器中輸入:
14.52 - 14.49 =
答案本該是 0.03。
但他的計算器算出來是 0.0299999……
圖片來自MIUI論壇
這個錯誤就不是 feature,而是一個實打實的程序缺陷。
接下來拿出小本本,機哥來給大家講解一下,為什麼會出這種錯誤。
——輕度燒腦時間開始——
我們知道,手機計算器雖然是用十進制顯示,但背後的運算靠的依然是二進制。
也就是說,當我們輸入 10 10,計算器幕後實際執行的是 1010 1010。
(十進制的 10 轉換為二進制就是 1010)
所以回到樓主提出的算式:14.52 - 14.49。
問題就出在 14.52 和 14.49 這兩個數,雖然在十進制中看起來清爽無比。
但轉換為二進制的時候,它們會變成無限循環的數。
(為什麼無限循環機哥就不說了,那是數學上的問題,我們知道結果就好)
你看,機哥用的這個二進制轉換器,就提示“超出計算精度”。
沒辦法,超出就超出吧,咱們用這個隻保留 16 位的小數,進行下一步運算。
兩者相減,等于 0.0000011110101110。
再把它轉換回十進制,結果是:
這個轉換器精度隻有16位,把我輸入的數略掉了一位
看吧,0.029998779296875,錯誤答案就是這樣出來的。
而早期安卓手機計算器的浮點精度,雖然比機哥的 16 位高,但也是有限的。
所以他們的答案是 0.0299999……
——輕度燒腦時間結束——
總而言之,這個問題不是 MIUI 的錯,也不是 HTC 的鍋,都是來源于 Android。
當時的安卓手機幾乎全部中槍。
你們不用拿出手機試,這個 bug 早就被修複了。
除了安卓,iOS 也鬧過所謂的計算器 bug。
2017 年,蘋果推出 iOS 11。
有網友反映自帶的計算器,在計算 1 2 3 這樣的幼兒園算術題,居然會給出 24 的結果。
出 bug 的原因非常簡單,就是因為用戶第一次點擊“ ”,它會有個淡入淡出的動畫。
一旦輸入太快,動畫還沒結束時,用戶第二次點擊的“ ”無法被識别。
所以算式會從“1 2 3”變成“1 23”,答案自然變成 24。
後來蘋果在 iOS 11.2 版本中,粗暴地去掉加号的淡入淡出動畫,修複此 bug。
圖片來自Benjamin Mayo
再後來的 iOS 11.3,蘋果加回動畫,提高響應速度,徹底解決這個問題。
圖片來自Benjamin Mayo
看了這麼多計算器 bug,是不是對咱們手中的“智能”手機産生懷疑了呢。
要我說嘛,還是學好數理化,背熟九九乘法表,凡事靠自己才是硬道理。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!