Русское сообщество по скриптингу

[INC] Math

Статьи или фрагменты кода для новичков и уже опытных скриптеров по AMXX.

Модератор: Chuvi

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только обучающему материалу по AMX Mod X.

[INC] Math

Сообщение Gazon » 03 июл 2021, 13:28

Недавно отрыл свой include: Math

Честно говоря, не видел подобного в инете, ну и решил сюда закинуть, думаю суть данной библиотеки ясна, если у кого есть желание продолжить, то дерзайте (как раз я хотел добавить логарифмы, но перехотел :-) )

math.inc
Код: Выделить всё
/* * * * * * * * * * * * * * * * * * * * *
 * - - - - - - - - - - - - - - - - - - - -
 * Название:     Math.inc
 * Версия:         0.1
 * Автор:         Hozon
 * - - - - - - - - - - - - - - - - - - - -
 * * * * * * * * * * * * * * * * * * * * */

#if defined _math_included
    #endinput
#endif

#define _math_included


/* * -> * -> * -> * -> * Математические константы * -> * -> * -> * -> * */

#define PI         3.14159
#define SQRT2     1.4142135623730951
#define E         2.718281828459045
#define LN2     0.6931471805599453
#define LN10    2.302585092994046
#define LOG2E    1.4426950408889634
#define LOG10E    0.4342944819032518

/* * <- * <- * <- * <- * Математические константы * <- * <- * <- * <- * */



/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Возведение в степень (Целое число)
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *
 * a - число (целое)
 * b - степень
 *
 * Возводит число в степень: exponentiation(2, 3)
 * Возвращает ответ: 8
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

stock exponentiation(a, b)
{
    new ConstNum = a
    for
(new i=0;i<b;i++)
    {    
        a 
= a * ConstNum
        
        if
(!i)
            a = ConstNum
    
}
    
    if
(== 0)
        a = 1
    
    return a
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Возведение в степень (Дробное число)
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *
 * a - число (дробное)
 * b - степень
 *
 * Возводит число в степень: exponentiation_f(0.5, 3)
 * Возвращает ответ: 0.125
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

stock Float:exponentiation_f(Float:a, b)
{
    new Float:ConstFloat = a
    for
(new i=0;i<b;i++)
    {    
        a 
= a * ConstFloat
        
        if
(!i)
            a = ConstFloat
    
}
    
    if
(== 0)
        a = 1.0
    
    return a
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Вычисление квадратного корня из числа
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *
 * a - число под корнем
 *
 * Вычисляет квадратный корень из числа: root(9)
 * Возвращает ответ: 3
 *
 * Вернёт -1, если число не целое, отрицательное или > 100.000.000
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

stock root(a)
{
    new i
    for
(i=0;i<10000;i++)
        if(* i == a)
            break
        
    if
(== 10000)
        i = -1
        
    return i
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Нахождение процента от числа
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *
 * a - число
 * b - процент
 *
 * Находит процент от числа: percent(120, 50)
 * Возвращает ответ: 60
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

stock percent(a, b)
{
    new Float:_b
    _b 
= float(b)
    
    return floatround
((* (_b / 100)))
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Вероятность события
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *
 * a - благоприятные события
 * b - все равновозможные события
 *
 * Вычисляет вероятность события: probability(1, 2)
 * Возвращает процент вероятности события: 50%
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

stock probability(a, b)
{
    new Float:_a, Float:_b
    _a 
= float(a), _b = float(b)
    
    return floatround
((100 * (_a / _b)))
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Теорема Пифагора (нахождение гипотенузы)
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *
 * a - первый катет
 * b - второй катет
 *
 * Находит чему равна гипотенуза: Hypotenuse_PythagoreanTheorem(3, 4)
 * По формуле: √a² + b²
 * Возвращает ответ: 5
 *
 * Вернёт -1, если один из катетов <= 0
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

stock Hypotenuse_PythagoreanTheorem(a, b)
{
    return (<= 0 || b <= 0) ? -: root(exponentiation(a, 2) + exponentiation(b, 2))
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Теорема Пифагора (нахождение катета)
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *
 * a - гипотенуза
 * b - известный катет
 *
 * Находит чему равен неизвестный катет: Cathetus_PythagoreanTheorem(5, 4)
 * По формуле: √a² - b²
 * Возвращает ответ: 3
 *
 * Вернёт -1, если катет или гипотенуза <= 0, если гипотенуза < известного катета
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

stock Cathetus_PythagoreanTheorem(a, b)
{
    return (<= 0 || b <= 0 || a < b) ? -: root(exponentiation(a, 2) - exponentiation(b, 2))
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Модуль (Целое число)
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *
 * a - число под модулем
 *
 * Преобразует число в положительное, если оно отрицательное: module(-1)
 * Возвращает ответ: 1
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

stock module(a)
{
    if(< 0)
        a *= -1
    
    return a
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Модуль (Дробное число)
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *
 * a - число под модулем
 *
 * Преобразует число в положительное, если оно отрицательное: module_f(-1.0)
 * Возвращает ответ: 1.0
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

stock Float:module_f(Float:a)
{
    if(< 0.0)
        a *= -1.0
    
    return a
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Арифметическая прогрессия (Целое число)
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *
 * a - первый член прогрессии
 * b - второй член прогрессии
 *
 * type: true - возвращает третий член прогрессии, false - возвращает разность прогрессии
 *
 * arithmetic_progression(2, 4, true)
 * Возвращает ответ: 6
 *
 * arithmetic_progression(2, 4, false)
 * Возвращает ответ: 2
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

stock arithmetic_progression(a, b, bool:type)
{
    return type ? (- a) + b : b - a
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Арифметическая прогрессия (Дробное число)
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *
 * a - первый член прогрессии
 * b - второй член прогрессии
 *
 * type: true - возвращает третий член прогрессии, false - возвращает разность прогрессии
 *
 * arithmetic_progression_f(0.5, 1.5, true)
 * Возвращает ответ: 2.5
 *
 * arithmetic_progression_f(0.5, 1.5, false)
 * Возвращает ответ: 1.0
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

stock Float:arithmetic_progression_f(Float:a, Float:b, bool:type)
{
    return type ? (- a) + b : b - a
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Геометрическая прогрессия (Целое число)
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *
 * a - первый член прогрессии
 * b - второй член прогрессии
 *
 * type: true - возвращает третий член прогрессии, false - возвращает разность прогрессии
 *
 * geometric_progression(2, 4, true)
 * Возвращает ответ: 8
 *
 * geometric_progression(2, 4, false)
 * Возвращает ответ: 2
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

stock geometric_progression(a, b, bool:type)
{
    return type ? (/ a) * b : b / a
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Геометрическая прогрессия (Дробное число)
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *
 * a - первый член прогрессии
 * b - второй член прогрессии
 *
 * type: true - возвращает третий член прогрессии, false - возвращает разность прогрессии
 *
 * geometric_progression_f(0.5, 1.5, true)
 * Возвращает ответ: 4.5
 *
 * geometric_progression_f(0.5, 1.5, false)
 * Возвращает ответ: 3.0
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

stock Float:geometric_progression_f(Float:a, Float:b, bool:type)
{
    return type ? (/ a) * b : b / a
}


Вы должны зарегистрироваться, чтобы видеть ссылки.
Аватара пользователя
Gazon
 
Сообщения: 63
Зарегистрирован: 26 авг 2019, 00:15
Благодарил (а): 6 раз.
Поблагодарили: 1 раз.
Опыт программирования: Больше трех лет
Языки программирования: JavaScript
Pawn

Вернуться в Статьи / фрагменты кода

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10