明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

VB與Excel在乘冪運(yùn)算時(shí)的結(jié)果差異及其不合理性

[摘要]東北林業(yè)大學(xué)環(huán)境科學(xué)系 隋祥引言表達(dá)式解析是編程工具與電子表格等軟件最基本的功能之一,不同的軟件在解析表達(dá)式時(shí)都遵循一定的運(yùn)算規(guī)則,在不同軟件中,這些運(yùn)算規(guī)則略有差異,導(dǎo)致計(jì)算結(jié)果也不同。筆者在實(shí)踐中發(fā)現(xiàn),VB與Excel在處理“連續(xù)乘冪”這一常見(jiàn)運(yùn)算時(shí),所遵循的法則有著較大的出入,而且都存在著不...
東北林業(yè)大學(xué)環(huán)境科學(xué)系 隋祥
引言
表達(dá)式解析是編程工具與電子表格等軟件最基本的功能之一,不同的軟件在解析表達(dá)式時(shí)都遵循一定的運(yùn)算規(guī)則,在不同軟件中,這些運(yùn)算規(guī)則略有差異,導(dǎo)致計(jì)算結(jié)果也不同。筆者在實(shí)踐中發(fā)現(xiàn),VB與Excel在處理“連續(xù)乘冪”這一常見(jiàn)運(yùn)算時(shí),所遵循的法則有著較大的出入,而且都存在著不合理的因素。本文試圖通過(guò)論述得到一種更為合理的運(yùn)算模式,并為編寫表達(dá)式解析類過(guò)程提供指導(dǎo)。

問(wèn)題分析
下表列出了VB6.0與Excel2003在處理同一個(gè)關(guān)于乘方運(yùn)算的表達(dá)式時(shí)所得到的結(jié)果。

表1 VB6.0與Excel2003執(zhí)行乘方運(yùn)算的結(jié)果差異

表達(dá)式
VB計(jì)算結(jié)果
Excel計(jì)算結(jié)果

2^-2^-2
.840896415253715
16

-2 ^ 2
-4
4

-2^-2^-2
-.840896415253715
16

2 ^ -3 ^ 4 ^ 7
0
5.16988E-26


本人經(jīng)過(guò)分析,認(rèn)為引起結(jié)果差異的主要因素是單目運(yùn)算符“-”的運(yùn)算級(jí)和連續(xù)乘冪的運(yùn)算順序。詳細(xì)分析如下:

1.對(duì)于表達(dá)式2^-2^-2,VB的計(jì)算步驟是2^(-2^-2)= .840896415253715,這時(shí)它的計(jì)算順序是從右到左,而Excel則嚴(yán)格按照從左到右的結(jié)合順序。如果我們把2^-2^-2理解為,那么,顯然VB的計(jì)算結(jié)果是合理的,但是不是VB在處理連續(xù)乘方運(yùn)算時(shí)都是從右到左的呢?答案是否定的。在計(jì)算2^3^4時(shí),VB得到的結(jié)果是4096而不是2.41785163922926E+24,這說(shuō)明此時(shí)VB并沒(méi)有把2^3^4理解為而是理解為,是從左到右的結(jié)合順序。顯然,VB在處理乘方運(yùn)算時(shí),其結(jié)合順序沒(méi)有一個(gè)令人信服的依據(jù),并存在不合理性。

2.對(duì)于表達(dá)式-2^2,VB的計(jì)算過(guò)程相當(dāng)于-(2^2)=-4,按照Microsoft MSDN 6.0 簡(jiǎn)體中文版VB幫助系統(tǒng)中的《運(yùn)算符優(yōu)先順序》一文中的描述,指數(shù)運(yùn)算符(^)高于負(fù)數(shù)運(yùn)算符(-)。這樣看來(lái)VB按照這樣的法則得到這樣的結(jié)果是合理的。對(duì)于Excel,它的計(jì)算過(guò)程相當(dāng)于(-2)^2,按照Excel 2003版幫助文檔的敘述,符號(hào)(-)要高于乘冪(^)(注:兩款軟件運(yùn)算符的中文名稱略有差異),那么這樣看來(lái)Excel的運(yùn)算也是合理的。但是Excel將“-(負(fù)號(hào))”的優(yōu)先級(jí)放在“^”運(yùn)算符之前的做法存在著一定問(wèn)題。例如對(duì)于表達(dá)式4-2^2、4--2^2、4---2^2、4-……-(n個(gè)-)2^2的結(jié)果都是0,這是按照上述法則令人無(wú)法順利解釋的。

3.由于上述兩條原因才導(dǎo)致了對(duì)于表達(dá)式-2^-2^-2的計(jì)算結(jié)果的不同。

4. 對(duì)于表達(dá)式2 ^ -3 ^ 4 ^ 7,VB計(jì)算結(jié)果為0,這是無(wú)論如何也無(wú)法順利解釋的。關(guān)于此結(jié)果的來(lái)歷還有待于進(jìn)一步研究。

表達(dá)式解析法則建議
鑒于VB與Excel在解析表達(dá)式時(shí)對(duì)乘冪運(yùn)算的結(jié)果差異及所存在的不合理性,建議在編寫表達(dá)式解析過(guò)程時(shí)應(yīng)當(dāng)遵循如下原則:

1.建議將乘冪運(yùn)算符“^”的優(yōu)先級(jí)至于單目負(fù)數(shù)運(yùn)算符“-”之前。

2.在連乘冪運(yùn)算的結(jié)合順序上應(yīng)當(dāng)統(tǒng)一,建議采用從左到右的結(jié)合方式。