數(shù)學(xué)表達(dá)式解析就是寫程序計(jì)算出一套數(shù)學(xué)表達(dá)式的結(jié)果.諸如:a+b*c / (d -d)之類的公式.這牽扯到一些編譯原理的東西.代碼寫起來有點(diǎn)麻煩,但只要耐心點(diǎn)總能搞定的.工具使用很簡單,輸入數(shù)學(xué)表達(dá)式的字符串,可以設(shè)置x, y, z三個(gè)參數(shù)值,按運(yùn)算按鈕或回車鍵,輸出運(yùn)算結(jié)果.
支持的運(yùn)算:
(1)標(biāo)準(zhǔn)運(yùn)算符
支持+,-,*,/,%,^這6種標(biāo)準(zhǔn)運(yùn)算符,其中:
%為求余運(yùn)算, a%b 相當(dāng)于 mod(a, b);
^為求冪運(yùn)算, a^b 相當(dāng)于 pow(a, b);
(2)括號(hào)標(biāo)志符
支持{}, [], ()這三類括號(hào)標(biāo)志符,括號(hào)必需成對(duì)出現(xiàn).支持最大32級(jí)括號(hào)的嵌套.如:
(2+(-2+(5.0*(9 + ((1+2)*3))/3) + 2))
-{exp[sqrt(abs[sin{rand(100)}])]}
(3)支持函數(shù)形式的運(yùn)算符
運(yùn)算符的函數(shù)名必需為小寫字母.具體說明如下:
單目運(yùn)算操作:
positive(a) // 相當(dāng)于 +a
negative(a) // 相當(dāng)于 -a
abs(a)
floor(a)
ceil(a)
sign(a)
sqrt(a) // a為負(fù)時(shí),會(huì)得到無效的數(shù)值
exp(a) // a過大時(shí),會(huì)得到無效的數(shù)值
log(a) // a為負(fù)時(shí),會(huì)得到無效的數(shù)值
log2(a) // a為負(fù)時(shí),會(huì)得到無效的數(shù)值
log10(a) // a為負(fù)時(shí),會(huì)得到無效的數(shù)值
sin(a)
cos(a)
tan(a)
asin(a)
acos(a)
atan(a)
rand(a) // 生成一個(gè)0到a的隨機(jī)數(shù)
雙目運(yùn)算操作:
add(a, b)
sub(a, b)
multiply(a, b)
divide(a, b)
max(a, b)
min(a, b)
mod(a, b)
pow(a, b) // 很容易得到無效的數(shù)值
atan2(a, b)
rand2(a, b) // 生成一個(gè)a到b的隨機(jī)數(shù)
三目運(yùn)算操作:
lerp(a, b, r) // 插值
clamp(v, hi, low) // 限定值的范圍
gray(r, g, b) // 顏色灰度化處理
add3(a, b, c)
average3(a, b, c)
四目運(yùn)算操作:
add4(a, b, c, d)
average4(a, b, c, d)
(4)常量值
有兩個(gè)常量值
PI 3.1415927
E 2.7182818
常量名必需為大寫字母,如(PI + E)或 sin(PI*0.5)
數(shù)值解析:
對(duì)整數(shù)的解析支持2,8,10,16四種進(jìn)制
0X開頭為16進(jìn)制, XABCDEF大小寫都可以, 如0xffff
0Y開頭為2進(jìn)制, Y大小寫都可以, 如0y10101010000
0開頭為8進(jìn)制, 如07523, 注意出現(xiàn)了"08"之類的分失敗
默認(rèn)為10進(jìn)制
(6)可以設(shè)置XYZ三個(gè)參數(shù), XYZ大小寫都可以.
如(X + y + z)
(7)提供幾個(gè)測(cè)試用的數(shù)學(xué)表達(dá)式字符串:
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