# usage . /bin/maths.rc # echo `{add 1 2 3 `{mul 1.3 `{sqrt `{div 89 45}}} scale = 3 fn add { { echo scale'='$scale echo $* | sed 's/ / + /g' } | bc } fn sub { { echo scale'='$scale echo $* | sed 's/ / - /g' } | bc } fn mul { { echo scale'='$scale echo $* | sed 's/ / * /g' } | bc } fn div { { echo scale'='$scale echo $* | sed 's/ / \/ /g' } | bc } fn mod { { echo scale'='1 echo $* | sed 's/ / % /g' } | bc } fn pow { { echo scale'='$scale echo $1 '^' $2 } | bc } fn exp { { echo 'scale = 20 define e(x) { auto a, b, c, i, s a = 1 b = 1 s = 1 for(i=1; 1; i++) { a *= x b *= i c = a/b if(c == 0) return s s += c } }' echo 'e('$1')' } | bc } fn floor { { echo scale'='0 echo $1 '/1' } | bc } fn ceil { echo ' scale=0 b = '$1' / 1 if (b != '$1') b++ print b ' | bc -s } fn sqrt { { echo scale'='0 echo 'sqrt(' $1 ')' } | bc }