Module: PijushCalculator
- Defined in:
- lib/pijush_calculator.rb
Constant Summary collapse
- VERSION =
"0.6.0"
Class Method Summary collapse
- .absolute(value) ⇒ Object
- .add(a, b) ⇒ Object
- .approximately_equal?(a, b, tolerance = 1e-9) ⇒ Boolean
- .arccosine(value, degrees = false) ⇒ Object
- .arcsine(value, degrees = false) ⇒ Object
- .arctangent(value, degrees = false) ⇒ Object
- .atan2(y, x, degrees = false) ⇒ Object
- .average(*values) ⇒ Object
- .clamp(value, minimum_value, maximum_value) ⇒ Object
- .combinations(n, r) ⇒ Object
- .cosecant(value, degrees = false) ⇒ Object
- .cosine(value, degrees = false) ⇒ Object
- .cotangent(value, degrees = false) ⇒ Object
- .cube(value) ⇒ Object
- .cube_root(value) ⇒ Object
- .divide(a, b) ⇒ Object
- .expm1(value) ⇒ Object
- .exponential(value) ⇒ Object
- .factorial(value) ⇒ Object
- .finite?(value) ⇒ Boolean
- .gcd(a, b) ⇒ Object
- .hyperbolic_cosine(value) ⇒ Object
- .hyperbolic_sine(value) ⇒ Object
- .hyperbolic_tangent(value) ⇒ Object
- .hypot(*values) ⇒ Object
- .lcm(a, b) ⇒ Object
- .log1p(value) ⇒ Object
- .log2(value) ⇒ Object
- .logarithm(value, base = 10) ⇒ Object
- .maximum(*values) ⇒ Object
- .mean(*values) ⇒ Object
- .median(*values) ⇒ Object
- .minimum(*values) ⇒ Object
- .modulo(a, b) ⇒ Object
- .multiply(a, b) ⇒ Object
- .natural_log(value) ⇒ Object
- .nth_root(value, degree) ⇒ Object
- .percentage(value, percent) ⇒ Object
- .permutations(n, r) ⇒ Object
- .power(a, b) ⇒ Object
- .product(*values) ⇒ Object
- .range(*values) ⇒ Object
- .reciprocal(value) ⇒ Object
- .round_to(value, digits = 0) ⇒ Object
- .secant(value, degrees = false) ⇒ Object
- .sine(value, degrees = false) ⇒ Object
- .square(value) ⇒ Object
- .square_root(value) ⇒ Object
- .standard_deviation(*values) ⇒ Object
- .subtract(a, b) ⇒ Object
- .sum(*values) ⇒ Object
- .tangent(value, degrees = false) ⇒ Object
- .variance(*values) ⇒ Object
Class Method Details
.absolute(value) ⇒ Object
14 |
# File 'lib/pijush_calculator.rb', line 14 def absolute(value)=value.abs |
.add(a, b) ⇒ Object
7 |
# File 'lib/pijush_calculator.rb', line 7 def add(a,b)=a+b |
.approximately_equal?(a, b, tolerance = 1e-9) ⇒ Boolean
57 |
# File 'lib/pijush_calculator.rb', line 57 def approximately_equal?(a,b,tolerance=1e-9)=((a-b).abs<=tolerance) |
.arccosine(value, degrees = false) ⇒ Object
38 |
# File 'lib/pijush_calculator.rb', line 38 def arccosine(value,degrees=false);r=Math.acos(value);degrees ? r*180/Math::PI : r;end |
.arcsine(value, degrees = false) ⇒ Object
37 |
# File 'lib/pijush_calculator.rb', line 37 def arcsine(value,degrees=false);r=Math.asin(value);degrees ? r*180/Math::PI : r;end |
.arctangent(value, degrees = false) ⇒ Object
39 |
# File 'lib/pijush_calculator.rb', line 39 def arctangent(value,degrees=false);r=Math.atan(value);degrees ? r*180/Math::PI : r;end |
.atan2(y, x, degrees = false) ⇒ Object
40 |
# File 'lib/pijush_calculator.rb', line 40 def atan2(y,x,degrees=false);r=Math.atan2(y,x);degrees ? r*180/Math::PI : r;end |
.average(*values) ⇒ Object
17 |
# File 'lib/pijush_calculator.rb', line 17 def average(*values);raise ArgumentError,"average requires a value" if values.empty?;values.sum.to_f/values.length;end |
.clamp(value, minimum_value, maximum_value) ⇒ Object
21 |
# File 'lib/pijush_calculator.rb', line 21 def clamp(value,minimum_value,maximum_value);raise ArgumentError,"minimum cannot exceed maximum" if minimum_value>maximum_value;[[value,minimum_value].max,maximum_value].min;end |
.combinations(n, r) ⇒ Object
51 |
# File 'lib/pijush_calculator.rb', line 51 def combinations(n,r);n=Integer(n);r=Integer(r);raise ArgumentError,"invalid combination range" if n<0||r<0||r>n;(n-r+1..n).reduce(1,:*)/(1..r).reduce(1,:*).to_f;end |
.cosecant(value, degrees = false) ⇒ Object
35 |
# File 'lib/pijush_calculator.rb', line 35 def cosecant(value,degrees=false)=1.0/sine(value,degrees) |
.cosine(value, degrees = false) ⇒ Object
32 |
# File 'lib/pijush_calculator.rb', line 32 def cosine(value,degrees=false)=Math.cos(degrees ? value*Math::PI/180 : value) |
.cotangent(value, degrees = false) ⇒ Object
36 |
# File 'lib/pijush_calculator.rb', line 36 def cotangent(value,degrees=false)=1.0/tangent(value,degrees) |
.cube(value) ⇒ Object
24 |
# File 'lib/pijush_calculator.rb', line 24 def cube(value)=value*value*value |
.cube_root(value) ⇒ Object
26 |
# File 'lib/pijush_calculator.rb', line 26 def cube_root(value)=Math.cbrt(value) |
.divide(a, b) ⇒ Object
10 |
# File 'lib/pijush_calculator.rb', line 10 def divide(a,b);raise ZeroDivisionError,"cannot divide by zero" if b==0;a.to_f/b;end |
.expm1(value) ⇒ Object
47 |
# File 'lib/pijush_calculator.rb', line 47 def expm1(value)=Math.exp(value)-1 |
.exponential(value) ⇒ Object
49 |
# File 'lib/pijush_calculator.rb', line 49 def exponential(value)=Math.exp(value) |
.factorial(value) ⇒ Object
28 |
# File 'lib/pijush_calculator.rb', line 28 def factorial(value);n=Integer(value);raise ArgumentError,"factorial requires a non-negative integer" if n<0;(1..n).reduce(1,:*);end |
.finite?(value) ⇒ Boolean
58 |
# File 'lib/pijush_calculator.rb', line 58 def finite?(value)=value.respond_to?(:finite?) ? value.finite? : true |
.gcd(a, b) ⇒ Object
29 |
# File 'lib/pijush_calculator.rb', line 29 def gcd(a,b)=a.to_i.gcd(b.to_i) |
.hyperbolic_cosine(value) ⇒ Object
42 |
# File 'lib/pijush_calculator.rb', line 42 def hyperbolic_cosine(value)=Math.cosh(value) |
.hyperbolic_sine(value) ⇒ Object
41 |
# File 'lib/pijush_calculator.rb', line 41 def hyperbolic_sine(value)=Math.sinh(value) |
.hyperbolic_tangent(value) ⇒ Object
43 |
# File 'lib/pijush_calculator.rb', line 43 def hyperbolic_tangent(value)=Math.tanh(value) |
.hypot(*values) ⇒ Object
50 |
# File 'lib/pijush_calculator.rb', line 50 def hypot(*values);raise ArgumentError,"hypot requires a value" if values.empty?;Math.hypot(*values);end |
.lcm(a, b) ⇒ Object
30 |
# File 'lib/pijush_calculator.rb', line 30 def lcm(a,b)=a.to_i.lcm(b.to_i) |
.log1p(value) ⇒ Object
46 |
# File 'lib/pijush_calculator.rb', line 46 def log1p(value);raise ArgumentError,"log1p requires a value greater than -1" if value<=-1;Math.log(1+value);end |
.log2(value) ⇒ Object
45 |
# File 'lib/pijush_calculator.rb', line 45 def log2(value);raise ArgumentError,"log2 requires a positive value" if value<=0;Math.log(value,2);end |
.logarithm(value, base = 10) ⇒ Object
44 |
# File 'lib/pijush_calculator.rb', line 44 def logarithm(value,base=10);raise ArgumentError,"invalid logarithm domain" if value<=0||base<=0||base==1;Math.log(value,base);end |
.maximum(*values) ⇒ Object
16 |
# File 'lib/pijush_calculator.rb', line 16 def maximum(*values);raise ArgumentError,"maximum requires a value" if values.empty?;values.max;end |
.mean(*values) ⇒ Object
18 |
# File 'lib/pijush_calculator.rb', line 18 def mean(*values)=average(*values) |
.median(*values) ⇒ Object
53 |
# File 'lib/pijush_calculator.rb', line 53 def median(*values);raise ArgumentError,"median requires a value" if values.empty?;s=values.sort;mid=s.length/2;s.length.odd? ? s[mid] : (s[mid-1]+s[mid]).to_f/2;end |
.minimum(*values) ⇒ Object
15 |
# File 'lib/pijush_calculator.rb', line 15 def minimum(*values);raise ArgumentError,"minimum requires a value" if values.empty?;values.min;end |
.modulo(a, b) ⇒ Object
11 |
# File 'lib/pijush_calculator.rb', line 11 def modulo(a,b);raise ZeroDivisionError,"cannot modulo by zero" if b==0;a%b;end |
.multiply(a, b) ⇒ Object
9 |
# File 'lib/pijush_calculator.rb', line 9 def multiply(a,b)=a*b |
.natural_log(value) ⇒ Object
48 |
# File 'lib/pijush_calculator.rb', line 48 def natural_log(value);raise ArgumentError,"natural logarithm requires a positive value" if value<=0;Math.log(value);end |
.nth_root(value, degree) ⇒ Object
27 |
# File 'lib/pijush_calculator.rb', line 27 def nth_root(value,degree);raise ArgumentError,"root degree cannot be zero" if degree==0;raise ArgumentError,"even root requires a non-negative value" if value<0&°ree.to_i.even?;value<0 ? -((-value)**(1.0/degree)) : value**(1.0/degree);end |
.percentage(value, percent) ⇒ Object
13 |
# File 'lib/pijush_calculator.rb', line 13 def percentage(value,percent)=value*percent/100.0 |
.permutations(n, r) ⇒ Object
52 |
# File 'lib/pijush_calculator.rb', line 52 def permutations(n,r);n=Integer(n);r=Integer(r);raise ArgumentError,"invalid permutation range" if n<0||r<0||r>n;(n-r+1..n).reduce(1,:*);end |
.power(a, b) ⇒ Object
12 |
# File 'lib/pijush_calculator.rb', line 12 def power(a,b);raise ZeroDivisionError,"cannot raise zero to a negative power" if a==0&&b.to_f<0;a**b;end |
.product(*values) ⇒ Object
20 |
# File 'lib/pijush_calculator.rb', line 20 def product(*values)=values.reduce(1,:*) |
.range(*values) ⇒ Object
56 |
# File 'lib/pijush_calculator.rb', line 56 def range(*values);raise ArgumentError,"range requires a value" if values.empty?;maximum(*values)-minimum(*values);end |
.reciprocal(value) ⇒ Object
22 |
# File 'lib/pijush_calculator.rb', line 22 def reciprocal(value);raise ZeroDivisionError,"cannot take reciprocal of zero" if value==0;1.0/value;end |
.round_to(value, digits = 0) ⇒ Object
59 |
# File 'lib/pijush_calculator.rb', line 59 def round_to(value,digits=0);raise ArgumentError,"digits must be an integer" unless digits.is_a?(Integer);value.round(digits);end |
.secant(value, degrees = false) ⇒ Object
34 |
# File 'lib/pijush_calculator.rb', line 34 def secant(value,degrees=false)=1.0/cosine(value,degrees) |
.sine(value, degrees = false) ⇒ Object
31 |
# File 'lib/pijush_calculator.rb', line 31 def sine(value,degrees=false)=Math.sin(degrees ? value*Math::PI/180 : value) |
.square(value) ⇒ Object
23 |
# File 'lib/pijush_calculator.rb', line 23 def square(value)=value*value |
.square_root(value) ⇒ Object
25 |
# File 'lib/pijush_calculator.rb', line 25 def square_root(value);raise ArgumentError,"square root requires a non-negative value" if value<0;Math.sqrt(value);end |
.standard_deviation(*values) ⇒ Object
55 |
# File 'lib/pijush_calculator.rb', line 55 def standard_deviation(*values)=Math.sqrt(variance(*values)) |
.subtract(a, b) ⇒ Object
8 |
# File 'lib/pijush_calculator.rb', line 8 def subtract(a,b)=a-b |
.sum(*values) ⇒ Object
19 |
# File 'lib/pijush_calculator.rb', line 19 def sum(*values)=values.sum |
.tangent(value, degrees = false) ⇒ Object
33 |
# File 'lib/pijush_calculator.rb', line 33 def tangent(value,degrees=false)=Math.tan(degrees ? value*Math::PI/180 : value) |
.variance(*values) ⇒ Object
54 |
# File 'lib/pijush_calculator.rb', line 54 def variance(*values);raise ArgumentError,"variance requires a value" if values.empty?;m=average(*values);values.sum{|v|(v-m)**2}.to_f/values.length;end |