VB與Excel在乘冪運算時的結果差異及其不合理性
發表時間:2024-02-21 來源:明輝站整理相關軟件相關文章人氣:
[摘要]東北林業大學環境科學系 隋祥引言表達式解析是編程工具與電子表格等軟件最基本的功能之一,不同的軟件在解析表達式時都遵循一定的運算規則,在不同軟件中,這些運算規則略有差異,導致計算結果也不同。筆者在實踐中發現,VB與Excel在處理“連續乘冪”這一常見運算時,所遵循的法則有著較大的出入,而且都存在著不...
東北林業大學環境科學系 隋祥
引言
表達式解析是編程工具與電子表格等軟件最基本的功能之一,不同的軟件在解析表達式時都遵循一定的運算規則,在不同軟件中,這些運算規則略有差異,導致計算結果也不同。筆者在實踐中發現,VB與Excel在處理“連續乘冪”這一常見運算時,所遵循的法則有著較大的出入,而且都存在著不合理的因素。本文試圖通過論述得到一種更為合理的運算模式,并為編寫表達式解析類過程提供指導。
問題分析
下表列出了VB6.0與Excel2003在處理同一個關于乘方運算的表達式時所得到的結果。
表1 VB6.0與Excel2003執行乘方運算的結果差異
表達式
VB計算結果
Excel計算結果
2^-2^-2
.840896415253715
16
-2 ^ 2
-4
4
-2^-2^-2
-.840896415253715
16
2 ^ -3 ^ 4 ^ 7
0
5.16988E-26
本人經過分析,認為引起結果差異的主要因素是單目運算符“-”的運算級和連續乘冪的運算順序。詳細分析如下:
1.對于表達式2^-2^-2,VB的計算步驟是2^(-2^-2)= .840896415253715,這時它的計算順序是從右到左,而Excel則嚴格按照從左到右的結合順序。如果我們把2^-2^-2理解為,那么,顯然VB的計算結果是合理的,但是不是VB在處理連續乘方運算時都是從右到左的呢?答案是否定的。在計算2^3^4時,VB得到的結果是4096而不是2.41785163922926E+24,這說明此時VB并沒有把2^3^4理解為而是理解為,是從左到右的結合順序。顯然,VB在處理乘方運算時,其結合順序沒有一個令人信服的依據,并存在不合理性。
2.對于表達式-2^2,VB的計算過程相當于-(2^2)=-4,按照Microsoft MSDN 6.0 簡體中文版VB幫助系統中的《運算符優先順序》一文中的描述,指數運算符(^)高于負數運算符(-)。這樣看來VB按照這樣的法則得到這樣的結果是合理的。對于Excel,它的計算過程相當于(-2)^2,按照Excel 2003版幫助文檔的敘述,符號(-)要高于乘冪(^)(注:兩款軟件運算符的中文名稱略有差異),那么這樣看來Excel的運算也是合理的。但是Excel將“-(負號)”的優先級放在“^”運算符之前的做法存在著一定問題。例如對于表達式4-2^2、4--2^2、4---2^2、4-……-(n個-)2^2的結果都是0,這是按照上述法則令人無法順利解釋的。
3.由于上述兩條原因才導致了對于表達式-2^-2^-2的計算結果的不同。
4. 對于表達式2 ^ -3 ^ 4 ^ 7,VB計算結果為0,這是無論如何也無法順利解釋的。關于此結果的來歷還有待于進一步研究。
表達式解析法則建議
鑒于VB與Excel在解析表達式時對乘冪運算的結果差異及所存在的不合理性,建議在編寫表達式解析過程時應當遵循如下原則:
1.建議將乘冪運算符“^”的優先級至于單目負數運算符“-”之前。
2.在連乘冪運算的結合順序上應當統一,建議采用從左到右的結合方式。