什麼智能手機,全特麼是傻子

來源:好機友

微信id:goodjiyou

作者:機哥

終於有人注意到這個問題了!

每個人的手機當中,都藏著一個難以察覺的「漏洞」

它也許微不足道,但運氣不好,也可能會釀成財產損失。

嗯,就是前兩天上了熱搜的——

什麼智能手機,全特麼是傻子

事情是這樣的……

機哥先問問大家一個簡單的計算題。

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,是不是對咱們手中的「智能」手機產生懷疑了呢。

要我說嘛,還是學好數理化,背熟九九乘法表,凡事靠自己才是硬道理。

  為什麼那麼多外國公司辱華的手段一模一樣?
  華為偷三星的折疊屏手機技術?大陸網民的意見是這樣的
  華為公布2019上半年業績:手機出貨量破紀錄,銷售收入4013 億人民幣

閱讀原文