為什麼好多 Android 手機的計算器都有這樣的問題呢?

時間 2021-05-30 00:00:27

1樓:派坤沙

其實很多人都說錯了。

2/3*3 確實是2 的,但如果分開計算,2/3,然後再乘 3 ,就算在標準的算術課上,它也不應該等於 2 的。

因為算術的角度必然要四捨五入,得到了 0.6666667 之後再乘 3 ,最後肯定會比 2 大。

所以,如果分開計算的話,0.6666667 * 3 = 2.0000001 是數學上正確的答案

這個問題,題主不妨回去問自己的數學老師。

2樓:

有兩點。你這例子可能不太好,這裡用0.5/3*3。

1、windows計算器下,0.166...67*3結果0.

5000...01,相比0.666...

67*3結果為2。這裡不一樣的原因顯示精度的處理,後者捨去了一位。

所以第一點,精度處理的方法。(windows計算器根據有效數字位數,測試的三星手機是根據小數點後位數)

2、windows計算器下,0.166...67*3結果0.

5000...01,相比0.5/3*3分步計算結果為0.

5。這裡不一樣的原因,猜想windows計算器把用結果繼續計算看作是連續計算,在計算過程中保留了精度。

所以第二點,是否在計算過程中保留精度。(沒保留的原因我猜是記憶體裡沒保留上次計算結果所以直接取結果框的文字?怎麼想我都不信是故意去丟失精度)(測試的三星手機沒這個問題,另外乙個雜牌安卓有)

寫完才發現偏題了,忽略1吧,2是回答。

另外反對所有說浮點數精度的。加減法怎麼不出問題?

3樓:胡澤涵

因為每乙個手機的計算器都有精確到幾位數的設定啊,所以後面的數值會被約等於,所以當然就有誤差了。這理解可以吧?第一次作答。。

4樓:王壹

我初三的時候花了一下午寫了個簡單計算器,WP的,雖然bug一大堆但是我剛剛試了一下沒有這個問題。數字是存成float的。。

5樓:張云聰

蘋果使用者請跟我操作:

把手機橫著拿,變成科學計算器,然後輸入:

1 除以 3 乘以 10 x的y次方 20 - 0.333333333333333333(按到按著沒反應) * 10 x的y次方 20 =

你會發現結果是

嗯,蘋果萬歲,我還以為結果會是一堆的3呢...感謝蘋果糾正我多年的錯誤認知

以上只是個玩笑~

只是我用蘋果的時,許多很重要的地方,感覺自己總是「用法不對」,結果發現一堆題主這種見微知著的人卻總是看不到那些重要的地方,而是抓著這麼微小的東西大發議論

6樓:

好奇的我剛才做測試,

測試機型紅公尺2A。

輸入 2÷3×3 結果是 2

輸入 2÷3 結果是0.66666667,8位精度再輸入×3 結果是2.00000001

無限迴圈小數受其精度影響。

如果是0.66666666×3結果是1.99999998如果再精確一位,0.666666667和0.666666666的結果都是2

7樓:Cstom CHan

分步計算2/3*3是指:

Step1: 2/3=x

Step2: x*3=y

嗎?第一步計算結果x等於0.6666666…(除不盡)第二步是將0.666666666*3

這樣得出的結果自然不會等於2。

難道你希望輸入0.666666666*3得出的結果等於2?

正要點發布時想起,題主的意思大概是希望計算2/3時以除不盡的形式(比如分數)記錄下來,進行下一次運算,以提高精度。

我倒覺得沒這必要。在計算第一步的時候已經當做完成了計算,第二次計算按照第一步得出的結果計算沒什麼不好的。況且在整體計算2/3*3的時候,計算出的結果等於2。

8樓:地下莖

大家沒有意識到題主問題裡面與「子小」的操作是兩碼事嗎?

問題表述的是2÷3×3=,如果的算式一起輸入最後按=號的話,毫無疑問計算器給出的答案是2。

但是子小的操作卻是2÷3後直接按了等號,然後乘3,再按等號,相當於算了兩次,答案自然不可能是2。因為第一次按完等號計算器就給你乙個近似值值了,難不成題主指望計算器給你乙個2/3的分數?這和沒計算有什麼區別?

所以結論是題主自己搞不清楚算式的表達方式。第一種是2÷3×3等於2的,第二種是兩個計算過程,2÷3約等於0.666667,然後又算了0.

666667×3等於多少。。。。。。結果自然不同

9樓:

因為他們沒用 BigDecimal。

有人說這個這問題沒有意義,我不這麼認為。

精度問題其實就是態度問題。

而且解決這個問題不要太簡單——隨手就改了。

有段時間要用到進製轉換,Windows自帶的長度不夠,搜了全網沒乙個能用的,沒辦法花了半個小時寫了個62進製([0-9a-zA-Z])內任意進製任意長度的進製轉換。

很簡單的事情,他們卻選擇了敷衍和忽視。

10樓:

求黑的有水平點~

補充:上午看到問題直接就回答了…導致木有看清楚問題,造成了誤解,還請提主見諒。對不起~原諒我急躁的心情。

11樓:Caspar Cui

這個問題其實挺好解決的。

首先,進行分步驟運算的時候,解決這個問題是不可能的。因為已經損失的精度是無法補全的。

舉個栗子:

首先寫出一段漢字:比如

日本歌鴝是一種體型小巧的歌鴝,體長15厘公尺。上體褐色,臉及胸橘黃,兩脅近灰。日本歌鴝(學名:Luscinia akahige)為鶲科歌鴝屬的鳥類。

然後轉換成拼音:

ribengequshiyiyzhongtixingxiaoqiaodegequ, tichang15limi。shangtihese,lianjixiongjuhuang,liangxiejinhui。ribengequ(xueming:

Luscinia akahige)weiwengkegequshuniaolei。

然後完全不經過處理的讓計算機自己轉換成中文,我採用的方案是直接使用搜狗如輸入啊的第乙個選項。

日本歌曲是一種提醒小瞧的歌曲,提倡15厘公尺。上體褐色,練級胸橘黃,兩類錦輝。日本歌曲(學名:Luscinia akahige)為翁可歌曲熟的鳥類。

看出來了吧,精度一旦損失了,轉換回來幾乎不可能。不過這個損失的精度比計算器損失的幾個浮點位的精度可是高多了。

那麼來分析一下為什麼有一部分計算器能夠正確的計算出來2 / 3 * 3

其實解決方案很簡單,buffer算式,或者計算器盡頭補位或者舍位,然後進行四捨五入。

那麼首先使用windows 8.1 自帶的計算器來進行乙個簡單的測試。

測試內容是0.6666666~667 * 3在有幾個6的時候會變成2

第一次測試 0.666666667 答案 2.000000001

第二次測試 0.6666666666667 答案 2.0000000000001

第三次測試 0.66666666666666667 答案 2.00000000000000001

ect ,最終測出的結果是0.66666666666666666666666666666667 的時候答案為2,因為計算器的精度到頭了,實際上,這個運算形成了精度損失。

那麼可以認為微軟的計算器是進行了四捨五入的。

當然有的計算器沒經過這個處理,出現2.00000000000000000001的結果,完全正常。

那麼如何杜絕呢?

可以使用buffer 算式來避免精度損失。

比如2 * 3 / 3 和 2 / 3 * 3 完全是乙個概念

那麼使用演算法1 就能正確的保證精度,演算法2 就不能。

計算機和人是不一樣的,計算機只會順序的執行人類的指令。

那麼讓乘法的優先順序高於除法就行了。但是這個需要把連續運算的結果和算式都進行buffer。

比如 123/6 *2 *5 /45

經過調整得出

123*2*5/6/45 = 4.5555555555555555555555555555556 (41/9)

如果這個直接乘9就有了精度損失

結果應該為 41但是會出現41.0000~001(儘管計算器會幫你四捨五入)

那麼調整乘9的策略為

123*2*5*9/6/45,結果就沒有精度損失了。

乘法優先順序比除法高一點,這個不能靠不靠譜的編譯器幫你調整。

想辦法自己弄出來唄。

不過。。。費勁不???能理解就好,夠用就行,還是四捨五入吧。

P.S. 實名反對所有賽個圖,我計算器算出來是2的答案。提主不是問這個,主意審題。提主提到魅族,可能提主就是單純的魅族使用者而已。

12樓:

0.6666666×3=2

0.666666×3=1.999998

所以就是個精度問題咯

Android 5.1 原生計算器 = 2

13樓:格仔非

如果分步算,結果還是2的話,才說明計算器有問題。

我理解的所謂分步,就是預設前一步的結果作為本次運算的運算數,

既然第一步的結果因為精度原因進行了處理,那將處理之後的結果作為第二步運算的乘數肯定是可以的,事實上所有計算器都是這樣做的。win7計算器基本型採用四捨五入,計算2/3=0.6666666666666667

而魅族是直接捨棄多餘位,計算2/3=0.6666666666

只是在第二步的時候,win7再進行了一次處理,計算0.6666666666666667*3=2

而魅族因為沒有溢位,所以直接得0.6666666666*3=1.9999999998

不過是處理方法上的差別而已,要是連這點兒精度處理都接受不了,按照你們的邏輯非要說這是錯。那也不過是魅族錯了一次,Windows錯了兩次罷了。

14樓:

為了避免有人說我是黑我把我在魅族論壇的看到的鏈結附上這計算器,我真是無語了啊,你2/3 然後再乘以3等於多少我不是針對哪個品牌,是發現好幾個品牌有這樣的問題,就覺得奇怪為一下。而我本身用的也是魅族MX4,但是沒想到我只說魅族的一點問題就有人說我是黑,這是怎麼回事?都不知道你在維護什麼?

那我把我的截圖也貼出來吧

為什麼就算配置很高的 Android 手機玩遊戲感覺畫面也沒有 iPhone 流暢,而且觸屏感覺比較遲鈍?

這一類問題我覺得得分類判斷一下題目是否有意義。1,題主是開發者或者所謂極客 那樣倒是有學習原理的價值和意義 2,題主只是普通使用者 那問題沒有價值,一方面,未必可以解釋的清楚,另一方面解釋清楚又能怎樣?3,小人之心的以為,問題本身也未免讓人聯想到無數優越感個人意見 李晉飛 首先分析現象 根據我的觀察...

為什麼Android手機的硬體設計上,也都不允許摳電池和換電池了?

fausthsdpa 針對早期不扣電池沒法重啟手機的風險,現有硬體上基本都能規避了。乙個是基帶晶元內部的硬體看門狗可以解決大部分軟體異常宕機,重啟系統。另乙個很多平台電源管理晶元支援長按開機鍵多少秒硬體系統重啟,記住這個是硬邏輯的,不受軟異常影響。當然極致情況 宇宙高能射線爆發摧毀晶元邏輯電路?除外...

你為什麼用 Android 手機而非 iPhone?

HowToPlay 乙個iPhone6大概6k 我沒用過,好像大概這個價錢 乙個紅公尺note大概600 我確定,因為我在用 兩者的使用壽命大概都在2年左右。試想 如果乙個人,十年間只用小公尺而非iPhone,就能省出大概 6000 600 10 2 1000 5 50000!五萬啊!再加上你爸爸給...