# 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
}
|