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

2021-09-30 02:05:05 字數 1964 閱讀 4854

表示式解析是程式設計工具與電子**等軟體最基本的功能之一,不同的軟體在解析表示式時都遵循一定的運算規則,在不同軟體中,這些運算規則略有差異,導致計算結果也不同。筆者在實踐中發現,vb與

excel

在處理「連續乘冪」這一常見運算時,所遵循的法則有著較大的出入,而且都存在著不合理的因素。本文試圖通過論述得到一種更為合理的運算模式,並為編寫表示式解析類過程提供指導。

下表列出了

vb6.0

與excel2003

在處理同乙個關於乘方運算的表示式時所得到的結果。

1 vb6.0

excel2003

執行乘方運算的結果差異

表示式vb計算結果

excel

計算結果

2^-2^-2

.840896415253715

16-2 ^ 2-44

-2^-2^-2

-.840896415253715

162 ^ -3 ^ 4 ^ 7

05.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.

在連乘冪運算的結合順序上應當統一,建議採用從左到右的結合方式。

實現VB與EXCEL的無縫連線

var status0 6562 var curfontsize 6562 9 var curlineheight 6562 12 減小字型 增大字型 vb是常用的應用軟體開發工具之一,由於vb的報表功能有限,而且一但報 式發生變化,就得相應修改程式,給應用軟體的維護工作帶來極大的不便。因此有 很多...

vba cad 獲取巨集的路徑 EXCEL與VBA

巨集的英文名為macro,是自動執行某種操作的命令集合。它包括兩個過程,即excel 4或者稱為xlm的巨集語言和excel 5中的vba巨集。excel 4的巨集由巨集表函式構成,由錄入在巨集表中的函式來控制程式的執行。至1993年發布的excel 5中,微軟開始推廣vba做為巨集語言,並同時引進...

在VB裡怎麼實現移位的算術運算操作

vb沒有提供移位操作的指令和函式,只提供and 與 or 或 xor 異或 eqv 同或 not 非 等幾個運算子,而程式設計時有時需要對乙個位元組進行移位操作 如進行加密 怎麼辦?其實只用and or二個運算子即可搞掂。例如要將變數byte1的第八位置1 假設byte1的二進位制值為0100110...