Module: PijushCalculator

Defined in:
lib/pijush_calculator.rb

Constant Summary collapse

VERSION =
"0.6.0"

Class Method Summary collapse

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

Returns:

  • (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

Raises:

  • (ArgumentError)


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

Raises:

  • (ArgumentError)


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

Raises:

  • (ArgumentError)


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

Raises:

  • (ZeroDivisionError)


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

Raises:

  • (ArgumentError)


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

Returns:

  • (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

Raises:

  • (ArgumentError)


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

Raises:

  • (ArgumentError)


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

Raises:

  • (ArgumentError)


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

Raises:

  • (ArgumentError)


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

Raises:

  • (ArgumentError)


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

Raises:

  • (ArgumentError)


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

Raises:

  • (ArgumentError)


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

Raises:

  • (ZeroDivisionError)


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

Raises:

  • (ArgumentError)


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

Raises:

  • (ArgumentError)


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&&degree.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

Raises:

  • (ArgumentError)


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

Raises:

  • (ZeroDivisionError)


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

Raises:

  • (ArgumentError)


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

Raises:

  • (ZeroDivisionError)


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

Raises:

  • (ArgumentError)


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

Raises:

  • (ArgumentError)


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

Raises:

  • (ArgumentError)


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