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

By Selena
at 2019-09-04T13:00
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問題,如果要解決就是在加減法裡的判斷式改一下就行了。
--
電腦看得懂的就是後序式(又稱逆向波蘭式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

By Kama
at 2019-09-07T09:45
at 2019-09-07T09:45

By Mason
at 2019-09-10T06:30
at 2019-09-10T06:30

By Regina
at 2019-09-13T03:15
at 2019-09-13T03:15

By Mason
at 2019-09-16T00:00
at 2019-09-16T00:00

By Oscar
at 2019-09-18T20:45
at 2019-09-18T20:45

By Victoria
at 2019-09-21T17:30
at 2019-09-21T17:30

By Kyle
at 2019-09-24T14:15
at 2019-09-24T14:15

By Ula
at 2019-09-27T11:00
at 2019-09-27T11:00

By Lauren
at 2019-09-30T07:45
at 2019-09-30T07:45

By George
at 2019-10-03T04:30
at 2019-10-03T04:30

By Olga
at 2019-10-06T01:15
at 2019-10-06T01:15

By Odelette
at 2019-10-08T22:00
at 2019-10-08T22:00

By Heather
at 2019-10-11T18:45
at 2019-10-11T18:45

By Ursula
at 2019-10-14T15:30
at 2019-10-14T15:30
Related Posts
台灣之星299不限速+網外市話299分

By Eden
at 2019-09-04T12:32
at 2019-09-04T12:32
「Google相機」有新調整!捨棄 Smart Bur

By Vanessa
at 2019-09-04T12:30
at 2019-09-04T12:30
怎會出現10%+10%=0.11的明顯失誤

By Olive
at 2019-09-04T12:27
at 2019-09-04T12:27
Google 準備好了?外媒爆料 Pixel 4 旗

By Megan
at 2019-09-04T12:24
at 2019-09-04T12:24
ROG Phone 2 超廣角拍照是否不清晰

By Yuri
at 2019-09-04T12:20
at 2019-09-04T12:20