X-Git-Url: http://git.shiar.net/descalc.git/blobdiff_plain/ce0d29d8a852b8bf7dcad717390a4ad8efb59263..b2aba05a22d1f4036008c2d12874ddc9eb98edc0:/math.pm.old diff --git a/math.pm.old b/math.pm.old new file mode 100644 index 0000000..e71c5d0 --- /dev/null +++ b/math.pm.old @@ -0,0 +1,83 @@ +# menu for DCT, by Shiar + +# 2004-10-02 22:55 - moved from 1.9 main + +use strict; +use utf8; + +my %newaction = ( + '+' => [2, sub {$stack[1] += shift @stack}], # addition + '-' => [2, sub {$stack[1] -= shift @stack}], # substraction + '*' => [2, sub {$stack[1] *= shift @stack}], # multiplication + '/' => [2, sub {$stack[1] /= shift @stack}], # division + 'mod' => [2, sub {$stack[1] %= shift @stack}], # modulo + + 'inv' => [1, sub {$stack[0] = 1 / $stack[0]}], # 1/x + 'sqrt' => [1, sub {$stack[0] = sqrt $stack[0]}], # square root + 'sq' => [1, sub {$stack[0] *= $stack[0]}], # squared + '^' => [2, sub {$stack[1] **= shift @stack}], # exponentiation + 'xroot'=> [2, sub {$stack[1] **= 1 / shift @stack}], # x-root of y + + 'log' => [1, sub {$stack[0] = log($stack[0]) / log(10)}], # logarithm + 'alog' => [1, sub {$stack[0] = 10 ** $stack[0]}], # 10^x + 'ln' => [1, sub {$stack[0] = log $stack[0]}], # natural logaritm + 'lnp1' => [1, sub {$stack[0] = log($stack[0]+1)}], # ln(x+1) + 'exp' => [1, sub {$stack[0] = exp($stack[0])}], # e^x + 'expm' => [1, sub {$stack[0] = exp($stack[0])-1}], # exp(x)-1 + + 'sin' => [1, sub {$stack[0] = sin $stack[0]}], # sine + 'asin' => [1, sub {$stack[0] = atan2($stack[0], sqrt(1 - $stack[0]*$stack[0]))}], # inverse sine + 'cos' => [1, sub {$stack[0] = cos $stack[0]}], # cosine + 'acos' => [1, sub {$stack[0] = atan2(sqrt(1 - $stack[0]*$stack[0]), $stack[0])}], # inverse cosine + 'tan' => [1, sub {$stack[0] = sin($stack[0]) / cos($stack[0])}], # tangent +# 'atan' => [1, sub {}], # arctangent + + 'sinh' => [1, sub {$stack[0] = ( exp($stack[0]) - exp(-$stack[0]) )/2}], # hyperbolic sine + 'cosh' => [1, sub {$stack[0] = ( exp($stack[0]) + exp(-$stack[0]) )/2}], # hyperbolic cosine + 'tanh' => [1, sub {$stack[0] = ( exp($stack[0]) - exp(-$stack[0]) )/( exp($stack[0]) + exp(-$stack[0]) )}], # hyperbolic tangent (sinh/cosh) + 'asinh'=> [1, sub {$stack[0] = log( sqrt($stack[0]**2+1)+$stack[0] )}], # inverse hyperbolic sine + 'acosh'=> [1, sub {$stack[0] = log( sqrt($stack[0]**2-1)+$stack[0] )}], # inverse hyperbolic cosine + 'atanh'=> [1, sub {$stack[0] = log( (1+$stack[0]) / (1-$stack[0]) )/2}], # inverse hyperbolic tangent + + '%' => [2, sub {$stack[0] = shift(@stack)/$stack[0]}], # percentage +# '%ch' => [2, sub {$val{i} = 100*(shift(@stack)-$val{i})/$val{i}}], # percentage change +# '%t' => [2, sub {$val{i} = 100*$val{i}/shift(@stack)}], # percentage total + + 'and' => [2, sub {$stack[1] &= shift @stack}], # bitwise and + 'or' => [2, sub {$stack[1] |= shift @stack}], # bitwise or + 'xor' => [2, sub {$stack[1] ^= shift @stack}], # bitwise xor + 'not' => [2, sub {$stack[0] = ~$stack[0]}], # bitwise not + 'sl' => [1, sub {$stack[0] *= 2}], # shift left + 'sr' => [1, sub {$stack[0] /= 2}], # shift right + + 'abs' => [1, sub {$stack[0] = abs $stack[0]}], # absolute #todo + 'sign' => [1, sub {$stack[0] = $stack[0] <=> 0}], # sign + 'ip' => [1, sub {$stack[0] = int $stack[0]}], # integer part + 'fp' => [1, sub {$stack[0] -= int $stack[0]}], # fractional part + +# 'rnd' => [1, sub {local $_ = 10**shift @stack; $val{i} = int(($val{i}+.5)*$_)/$_}], # round +# 'trnc' => [1, sub {local $_ = 10**shift @stack; $val{i} = int($val{i}*$_)/$_}], # truncate + 'floor'=> [1, sub {$stack[0] = int $stack[0]}], # floor + 'ceil' => [1, sub {$stack[0] = int $stack[0]+.9999}], # ceil + + 'min' => [2, sub {local $_ = shift @stack; $stack[0] = $_ if $_<$stack[0] }], # minimum + 'max' => [2, sub {local $_ = shift @stack; $stack[0] = $_ if $_>$stack[0] }], # maximum + + 'dec' => [0, sub {$set{base} = 10}], # decimal + 'bin' => [0, sub {$set{base} = 2}], # binary + 'oct' => [0, sub {$set{base} = 8}], # octal + 'hex' => [0, sub {$set{base} = 16}], # hexadecimal + 'base' => [1, sub {$set{base} = shift @stack}], # alphanumerical + + '!' => [1, sub {local $_ = $stack[0]; $stack[0] *= $_ while --$_>1}], # factor + 'rand' => [0, sub {unshift @stack, rand}], # random value <1 +); # newaction + +#while (my ($cmd, $val) = each %newaction) { +# $action{$cmd} = $val; +#} +#%action = %newaction; +$action{$_} = $newaction{$_} for keys %newaction; + +1; +