怎會出現10%+10%=0.11的明顯失誤 - 手機討論

Selena avatar
By Selena
at 2019-09-04T13:00

Table of Contents

一般計算機要計算的時候會把人寫的算式轉成電腦看得懂的算式

電腦看得懂的就是後序式(又稱逆向波蘭式Reverse polish notation)

以10%+10%來說會被轉換成10%10%+,這時候看網路找到的計算機原始碼

double s[] = context.stackRe;
int percentPC = -2;
for (int pc = 0; pc < codeLen; ++pc) {
final int opcode = code[pc];
switch (opcode) {
case VM.CONST:
s[++p] = constsRe[constp++];
break;

case VM.ADD: {
final double a = s[--p];
double res = a + (percentPC == pc-1 ? s[p] * s[p+1] : s[p+1]);
s[p]= res
break;
case VM.SUB: {
final double a = s[--p];
double res = a - (percentPC == pc-1 ? s[p] * s[p+1] : s[p+1]);
s[p] = res;
break;
}
case VM.PERCENT: s[p] = s[p] * .01; percentPC = pc; break;
}
return p;
一開始會先將10%10%+放進一個陣列裡[10,%,10,%,+]
另外再準備一個空的堆疊器s
接著進行掃描
step 1 掃到10因為是常數所以直接放進s這個堆疊裡面
step 2 掃到%,根據case VM.PERCENT 會將s裡的10取出來進行百分比運算然後precentPC
這個pointer會指向%這個位置
step 3 掃到10再放進s裡
step 4 掃到% 跟步驟2一樣
step 5 掃到+ 根據
case VM.ADD: double res = a + (percentPC == pc-1 ? s[p] * s[p+1] : s[p+1]);
其中加法運算元中有這個判斷式(減法裡也是有一樣的判斷式)

因為percentPC == pc-1 這個條件成立所以變成0.1*0.1

所以最後算式變成0.1+0.1*0.1 = 0.11

所以也不是什麼BUG問題,如果要解決就是在加減法裡的判斷式改一下就行了。

--
Tags: 手機

All Comments

Kama avatar
By Kama
at 2019-09-07T09:45
趕快推不然別人以為我看不懂
Mason avatar
By Mason
at 2019-09-10T06:30
幫我的笨腦袋QQ.....
Regina avatar
By Regina
at 2019-09-13T03:15
我以為是乘除優先,所以才會算成10%的10%=0.11
Mason avatar
By Mason
at 2019-09-16T00:00
有沒有文組的說法
Oscar avatar
By Oscar
at 2019-09-18T20:45
其實二樓你說的也差不多對了90%了
Victoria avatar
By Victoria
at 2019-09-21T17:30
在程式的邏輯裡 %的優先程度就跟乘除一樣
Kyle avatar
By Kyle
at 2019-09-24T14:15
簡單說就是x+y%會被計算機算成x+x*y*0.01。
Ula avatar
By Ula
at 2019-09-27T11:00
像美國特價都是寫多少off,例如40%off 像我腦中就會
Lauren avatar
By Lauren
at 2019-09-30T07:45
轉成價格*0.6,但是如果計算機按價格-40%,感覺也蠻符合美國人的邏輯。
George avatar
By George
at 2019-10-03T04:30
美國就懶的去算錢,我們台灣早習慣如何算%
Olga avatar
By Olga
at 2019-10-06T01:15
美國只關心付的總數,台灣是考慮加%差多少
Odelette avatar
By Odelette
at 2019-10-08T22:00
ex開發票5%, 我們習慣5%稅金算出來美國人應該只管你最後到底要付多少
Heather avatar
By Heather
at 2019-10-11T18:45
推,第一次知道
Ursula avatar
By Ursula
at 2019-10-14T15:30

台灣之星299不限速+網外市話299分

Eden avatar
By Eden
at 2019-09-04T12:32
剛收到台灣之星簡訊 說是申請該方案路徑修正 請重新申請 http://i.imgur.com/XF6Am6b.jpg 但,我還是續約不了,麻煩其他鄉民測試一下 ----- Sent from JPTT on my OnePlus GM1910. - ...

「Google相機」有新調整!捨棄 Smart Bur

Vanessa avatar
By Vanessa
at 2019-09-04T12:30
「Google相機」有新調整!捨棄 Smart Burst 改推 Top Shot 拍攝模式 3C科技頻道/綜合報導/ 2019-09-04 11:15 據外媒《9to5Google》報導,Google 於今(9/3)向 Pixel 3 手機推送了新的 Google Camera 6.3 更新,最大的特色 ...

怎會出現10%+10%=0.11的明顯失誤

Olive avatar
By Olive
at 2019-09-04T12:27
不是設定問題, 而是一般人的認知問題, 當大眾說10%=0.1的時候, 其實已經誤導了自己, 500的10%就不是0.1啊? 大眾認知的10%=0.1, 實際上是1*10%=0.1, 對電腦來說, 必須告訴電腦前置數字是多少, 他才能算%數實際代表的數字, 所以當第一個10%輸入時, 因為前面沒數字, 程式把 ...

Google 準備好了?外媒爆料 Pixel 4 旗

Megan avatar
By Megan
at 2019-09-04T12:24
Google 準備好了?外媒爆料 Pixel 4 旗艦新機已獲 FCC 認證 文/記者劉惠琴/ 2019-09-04 11:52 Google 新一代 Pixel 4 系列旗艦雙機,市場預計將於10月初發表。儘管官方尚未發出 邀請函,不過,隨著近日 Pixel 4 新機已通過美國聯邦通信委員會FCC的認證 ...

ROG Phone 2 超廣角拍照是否不清晰

Yuri avatar
By Yuri
at 2019-09-04T12:20
近日拿到 ROG Phone 2,把玩好幾天,很滿意。 昨日開始研究相機,發現超廣角拍出來的照片只有縮圖能看, 一但放大到一定比例(70% ~ 100%)頓時覺得糊糊的、顆粒大、不夠清晰。 已至華碩專賣店比過 Zenfone 6 與 ROG Phone 2 的展示機, 確定超廣角成像就這樣糊糊的、顆粒大、不 ...