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