API Log - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

Log

Оглавление · Алфавитный указатель · BASIC built-ins

ClassicUO • Runtime API

Вычисляет натуральный логарифм.

Точный синтаксис

Log(number:Any) -> Decimal

Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.

Параметры

  • number — Обязательное число Integer/Decimal либо десятичная строка с точкой и необязательной экспонентой, например "-1.25e2". Язык интерфейса не влияет. Нераспознанный текст (включая hex-строку), Unit, Array и Object дают 0; числовой hex-литерал уже является Integer. Возможны NaN/Infinity. Основание e, не 10. Log(1)=0, Log(0)=-Infinity, отрицательный аргумент даёт NaN, положительная бесконечность — Infinity.

Возвращает

Decimal — ln(number). Основание e, не 10. Log(1)=0, Log(0)=-Infinity, отрицательный аргумент даёт NaN, положительная бесконечность — Infinity. Число, не ID и не признак успеха; 1/0 здесь нельзя трактовать как выполнено/не выполнено.

Поведение

  • Вычисляется локально в потоке скрипта: без запроса серверу, движения, прицела, ожидания и изменения глобальных переменных.
  • Decimal хранится как двоичный Double, не .NET decimal. Результат может быть приближённым; сравнивайте конечные дробные значения с допуском. NaN/Infinity не используйте как координаты или количество предметов.
  • Основание e, не 10. Log(1)=0, Log(0)=-Infinity, отрицательный аргумент даёт NaN, положительная бесконечность — Infinity.

Внутренние функции: от вызова до результата

Ниже реальные этапы регистрации и преобразования. Полные функции примеров показывают полезные формулы скрипта, не заменяя математическую реализацию платформы.

1. Register

Register связывает имя BASIC с одним аргументом с нативным вычислением. После преобразования вызывается System.Math; скрытые скрипты и процедуры сервера не запускаются.

Decimal — ln(number). Основание e, не 10. Log(1)=0, Log(0)=-Infinity, отрицательный аргумент даёт NaN, положительная бесконечность — Infinity. Число, не ID и не признак успеха; 1/0 здесь нельзя трактовать как выполнено/не выполнено.

Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApi.cs; функция Register.

2. BasicDouble

BasicDouble сохраняет Integer/Decimal, читает строку через инвариантный NumberStyles.Float, для неподдерживаемого значения даёт 0. Abs обрабатывает обычный Integer напрямую до перехода к Double.

Обязательное число Integer/Decimal либо десятичная строка с точкой и необязательной экспонентой, например "-1.25e2". Язык интерфейса не влияет. Нераспознанный текст (включая hex-строку), Unit, Array и Object дают 0; числовой hex-литерал уже является Integer. Возможны NaN/Infinity.

Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApi.cs; функция BasicDouble.

Вычисляется локально в потоке скрипта: без запроса серверу, движения, прицела, ожидания и изменения глобальных переменных.

Примеры

Пример 1. Прямое вычисление

# Прямое вычисление
#
# Вычисляет натуральный логарифм.
#
# Decimal — ln(number). Основание e, не 10. Log(1)=0, Log(0)=-Infinity, отрицательный аргумент
# даёт NaN, положительная бесконечность — Infinity. Число, не ID и не признак успеха; 1/0 здесь
# нельзя трактовать как выполнено/не выполнено.

SUB Main()
    # number = 1; ожидается 0 (~ означает приближённо). value хранит результат, CStr лишь
    # форматирует его для Print.

    VAR value = Log(1)
    UO.Print(CStr(value))
END SUB

Разбор параметров и выполнения:

  • number = 1; ожидается 0 (~ означает приближённо). value хранит результат, CStr лишь форматирует его для Print.

Пример 2. Другой аргумент через переменную

# Другой аргумент через переменную
#
# Вычисляет натуральный логарифм.
#
# Decimal — ln(number). Основание e, не 10. Log(1)=0, Log(0)=-Infinity, отрицательный аргумент
# даёт NaN, положительная бесконечность — Infinity. Число, не ID и не признак успеха; 1/0 здесь
# нельзя трактовать как выполнено/не выполнено.

SUB Main()
    # number = 2.718281828459045; ожидается ~1 (~ означает приближённо). value хранит результат,
    # CStr лишь форматирует его для Print.

    VAR inputValue = 2.718281828459045
    VAR value = Log(inputValue)
    UO.Print(CStr(value))
END SUB

Разбор параметров и выполнения:

  • number = 2.718281828459045; ожидается 1 ( означает приближённо). value хранит результат, CStr лишь форматирует его для Print.

Пример 3. Полная вспомогательная функция

# Полная вспомогательная функция
#
# Вычисляет натуральный логарифм.
#
# Decimal — ln(number). Основание e, не 10. Log(1)=0, Log(0)=-Infinity, отрицательный аргумент
# даёт NaN, положительная бесконечность — Infinity. Число, не ID и не признак успеха; 1/0 здесь
# нельзя трактовать как выполнено/не выполнено.

# manual-check: scalar-math Log
SUB Main()
    # value>0, baseValue>0 и baseValue<>1. LogBase даёт Log(value)/Log(baseValue);
    # LogBase(100,10)≈2. Ошибочный вход даёт собственный запасной 0, который возможен и как
    # правильный логарифм.

    VAR value = LogBase(100,10)
    UO.Print(CStr(value))
END SUB

SUB LogBase(value,baseValue)
    IF value <= 0 OR baseValue <= 0 OR baseValue = 1 THEN
        RETURN 0
    END IF
    RETURN Log(value)/Log(baseValue)
END SUB

Разбор параметров и выполнения:

  • value>0, baseValue>0 и baseValue<>1. LogBase даёт Log(value)/Log(baseValue); LogBase(100,10)≈2. Ошибочный вход даёт собственный запасной 0, который возможен и как правильный логарифм.