NAME

Sidef::Math::Math

DESCRIPTION

The Math class implements several useful mathematical functions.

SYNOPSIS

say Math.lcm(3,4,5)
say Math.avg(1,2,3,4)

INHERITS

Inherits methods from:

* Sidef::Object::Object

METHODS

avg

Math.avg(list...)

Returns the arithmetic mean of a list of numbers.

say Math.avg(42, 50, 99, 147)       #=> 84.5

Aliases: arithmetic_mean

batch_gcd

Math.batch_gcd(list...)

Efficiently computes the batch-gcd of a list of integers.

say Math.batch_gcd(1909,2923,291,205,989,62,451,1943,1079,2419)

Output:

[1909, 1, 1, 41, 23, 1, 41, 1, 83, 41]

batch_invmod

Math.batch_invmod(array, n)

Efficiently computes the modular multiplicative inverses of a list of integers, modulo n.

say Math.batch_invmod([33, 42, 99, 103], 2017)      #=> [489, 1969, 163, 235]

binsplit

Math.binsplit(block, list...)

Binary splitting algorithm.

var arr = [1,2,3,4,5,6,7]

# Sum of a list using binary splitting
say Math.binsplit({|a,b| a + b }, arr...)

# Product of a list using binary splitting
say Math.binsplit({|a,b| a * b }, arr...)

chinese

Math.chinese(pairs...)

Returns the solution for x in x ≡ a_k (mod m_k), using the Chinese Remainder Theorem (CRT), given a list of pairs [a_k,m_k]:

say Math.chinese([14,643], [254,419], [87,733])     #=> 87041638

gcd

Math.gcd(list...)

Returns the greast common multiple (GCD) of a list of integers.

geometric_mean

Math.geometric_mean(list...)

Returns the geometric mean of a list of numbers.

say Math.geometric_mean(42, 50, 99, 147)        #=> 74.352051512093712...

harmonic_mean

Math.harmonic_mean(list...)

Returns the harmonic mean of a list of numbers.

say Math.harmonic_mean(42, 50, 99, 147)         #=> 65.883471411109602...

lcm

Math.lcm(list...)

Returns the least common multiple (LCM) of a list of integers.

map

Math.map(value, in_min, in_max, out_min, out_max)

Return a given value mapped from a given range to another given range.

# Map 25 from 1..100, to 1..10
say Math.map(25, 1, 100, 1, 10)     #=> 3.181818181...

max

Math.max(list...)

Returns the largest numerical value from a list of numbers.

min

Math.min(list...)

Returns the smallest numerical value from a list of numbers.

num2percent

Math.num2percent(num, min, max)

Returns a given value as a percentage, given min and max of the value range.

# Map the value 25 as a percentage, from a range 1..400
say Math.num2percent(25, 1, 400)        #=> 6.01503759398...

prod

Math.prod(list...)

Returns the product of a list of numbers.

Aliases: product

product_tree

Math.product_tree(list...)

Return the product-tree of a list of integers.

say Math.product_tree(10,20,30,40,50,60)

range_map

Math.range_map(amount, from, to)

Returns a RangeNumber object with the amount value mapped between the values from and to.

say Math.range_map(10, 2, 5)    #=> RangeNum(2, 5, 3/10)

range_sum

Math.range_sum(from, to, step)

Returns the sum of a given range and an optional given step.

say Math.range_sum(1, 10)      #=> 55
say Math.range_sum(1, 10, 2)   #=> 30.25

remainders

Math.remainders(n, array)

Efficiently returns the remainders of n when divided by each integer from the given array.

say Math.remainders(8675309, [11,13,17,19,23])      #=> [5, 6, 5, 4, 8]

smooth_numbers

Math.smooth_numbers(primes...)

It returns an Enumerator object, which generates smooth numbers using the given list of primes.

Example:

var a = Math.smooth_numbers(2,3,5,7)    # 7-smooth numbers
var b = Math.smooth_numbers(2,5,7)      # 7-smooth numbers not divisible by 3

say a.first(30)
say b.first(30)

# Iteration is also supported
a.each {|k|
    if (k > 1e5) {
        say k           #=> 100352
        break
    }
}

sum

Math.sum(list...)

Returns the sum of a list of numbers.