數學表達式解析工具

數學表達式解析工具ide

      數學表達式解析就是寫程序計算出一套數學表達式的結果.諸如:a+b*c / (d -d)之類的公式.這牽扯到一些編譯原理的東西.代碼寫起來有點麻煩,但只要耐心點總能搞定的.工具使用很簡單,輸入數學表達式的字符串,能夠設置x, y, z三個參數值,按運算按鈕或回車鍵,輸出運算結果.函數

 


下載地址:工具

http://files.cnblogs.com/WhyEngine/MathExpression.7z測試

 

(1)標準運算符
支持+,-,*,/,%,^這6種標準運算符,其中:
%爲求餘運算, a%b 至關於 mod(a, b);
^爲求冪運算, a^b 至關於 pow(a, b);spa

 

(2)括號標誌符
支持{}, [], ()這三類括號標誌符,括號必需成對出現.支持最大32級括號的嵌套.如: 
(2+(-2+(5.0*(9 + ((1+2)*3))/3) + 2))
-{exp[sqrt(abs[sin{rand(100)}])]}blog

 

(3)支持函數形式的運算符
運算符的函數名必需爲小寫字母.具體說明以下:
單目運算操做:
positive(a) // 至關於 +a
negative(a) // 至關於 -a
abs(a)
floor(a)
ceil(a)
sign(a)
sqrt(a) // a爲負時,會獲得無效的數值
exp(a) // a過大時,會獲得無效的數值
log(a) // a爲負時,會獲得無效的數值
log2(a) // a爲負時,會獲得無效的數值
log10(a) // a爲負時,會獲得無效的數值
sin(a)
cos(a)
tan(a)
asin(a)
acos(a)
atan(a)
rand(a) // 生成一個0到a的隨機數ip

雙目運算操做:
add(a, b)
sub(a, b)
multiply(a, b)
divide(a, b)
max(a, b)
min(a, b)
mod(a, b)
pow(a, b) // 很容易獲得無效的數值
atan2(a, b)
rand2(a, b) // 生成一個a到b的隨機數字符串

三目運算操做:
lerp(a, b, r) // 插值
clamp(v, hi, low) // 限定值的範圍
gray(r, g, b) // 顏色灰度化處理
add3(a, b, c)
average3(a, b, c)get

四目運算操做:
add4(a, b, c, d)
average4(a, b, c, d)數學

 

(4)常量值
有兩個常量值
PI 3.1415927
E 2.7182818
常量名必需爲大寫字母,如(PI + E)或 sin(PI*0.5)

 

(5)數值解析
對整數的解析支持2,8,10,16四種進制
0X開頭爲16進制, XABCDEF大小寫均可以, 如0xffff
0Y開頭爲2進制, Y大小寫均可以, 如0y10101010000
0開頭爲8進制, 如07523, 注意出現了"08"之類的分失敗
默認爲10進制

 

(6)能夠設置XYZ三個參數, XYZ大小寫均可以.
如(X + y + z)

 

(7)提供幾個測試用的數學表達式字符串:
log(E) * PI +6 + lerp(1.0, 100.0, PI) + average4(x, y, z, 100) / 5 - 300 + gray(120, 620, 30)
PI + 1*3.0 + 6 + (1 + 2 * 3*(x+y)) -28.141594 + sqrt(2) + abs(-2) + mod(2, 3) + 2^(sqrt(5)) - 10.125327

寫了以後沒有作太多測試,有計算錯誤的表達式,請聯繫我.

相關文章
相關標籤/搜索