VB與Excel在乘冪運算時的結果差異及其不合理性

來源:互聯網
上載者:User
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.在連乘冪運算的結合順序上應當統一,建議採用從左至右的結合方式。





聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.