|
Математические операции с плавающей точкой. |
|
|
DarkMaster |
26.10.2015, 18:57
|
Модератор UOPilot
Сообщений: 9.573
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 28549
Пользователь №: 11.279
|
Данный плагин позволяет производит математические операции с числами с плавающей точкой. Плагин необходимо поместить в папку Plugins рядом с uopilot.exe. Для работы требуются установленные библиотеки c++: http://www.microsoft.com/ru-ru/download/de...s.aspx?id=40784Код math.dbl (<var1> <sign> <var2>) <var1> - первое число (может быть не целым). <sign> - знак математической операции (+-/*). <var2> - второе число (может быть не целым). Корректной последовательностью чисел с плавающей точкой для считается последовательность, удовлетворяющая следующим условиям: Знак положительного или отрицательного числа (необязательно). Последовательность цифр, как вариант, может содержать десятичную точку или запятую. Дополнительная экспонентная часть, которая сама по себе состоит из символа 'e' или 'E', после которого следует дополнительный знак и последовательность цифр. Диапазон значений: min: 2,2250738585072014 E – 308 max: 1,7976931348623158 E + 308
Результат работы функции должен быть присвоен массиву. Возвращаемые значения: %a [1] - результат математической операции. Если функция завершилась с ошибкой, вернет "0". %a [2] - возвращает OK, если функция успешно выполнена, Error, если произошла ошибка. %a [3] - расшифровка ошибки: Succes - функция завершилась успешно. (%a [2]="OK") First value: ERANGE - первый параметр за пределами допустимого значения. Second value: ERANGE - второй параметр за пределами допустимого значения. No sign: [символ] - знак математической операции не найден.
Пример: set %a math.dbl (12.1 / 3) log Результат вычислений: %a [1] log Ошибка: %a [2] log Текст ошибки: %a [3]
В плагин не следует передавать несколько математический операций, использовать скобки и т.д. Функция должна принять только перечисленные выше параметры. Если необходимо произвести какие-либо длинные математические вычисления, то производите их до передачи параметров или используйте eval(). При работе с числами с плавающей точкой нужно понимать: Расчет формулы «x2-y2» лучше вычислять используя формулу «(x-y)(x+y)». В арифметике с плавающей запятой правило (a*b)*c = a*(b*c) не выполняется для любых арифметических операций. Не все десятичные числа имеют двоичное представление с плавающей запятой. Например, число «9999999999.2» будет представлено как «9999999999.200001». При сравнении чисел с плавающей точкой не корректно выражение: a < b Для подобного сравнения правильным будет сравнение разницы чисел с некоторой константой: c = a - b abs(c) < 0.1 0.1 взято для примера, точность вы можете задать самостоятельно.
Так же необходимо понимать, что использование чисел с плавающей точкой(в т.ч. их разницы) в пилоте по средствам оператора if может быть не корректным. Сообщение отредактировал DarkMaster - 2.4.2016, 10:17
Прикрепленные файлы
math.zip ( 3,85 килобайт )
Кол-во скачиваний: 2089
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
cirus |
13.11.2015, 2:26
|
Elder
Сообщений: 3.480
Регистрация: 18.8.2014 Группа: Пользователи Наличность: 27517
Пользователь №: 16.971
Возраст: 29
|
Скрипт 1, работает, проблем нет
Код set %a math.dbl (1234,567 / 37) log %a [1] stop_script Скрипт 2, не работает
Код set %b WindowStatus.find (1111 *UoPilot v2.35 WK* TfmMain) //поиск пилота (работает, тут нет проблем) set %a math.dbl (1234,567 / 37) log %a [1] //результат 0 stop_script
Лог второго скрипта
Код set %b WindowStatus.find (1111 *UoPilot v2.35 WK* TfmMain) %TfmMain) [ 2 1 ] = 525014 set %a math.dbl (1234,567 / 37) %37) [ 4 1 ] = No sign: . log %a(0) [1] 0 stop_script Если использовать плагин для поиска окна, причём в любой вкладке, то математические операции после этого не работают. Начнут работать только после перезапуска пилота. No sign:, почему-то не видит знак операции.
|
|
|
|
FREEON |
15.6.2019, 15:04
|
Journeyman
Сообщений: 365
Регистрация: 14.2.2017 Группа: Пользователи Наличность: 1182
Пользователь №: 18.346
Возраст: 25
|
а чо когда выполняю такой код Код set %arr [1 13] 8 set %op [1 2] math.dbl (%arr [1 13] * 2.25) log %op [1 2] end_script
в лог выдает: Цитата 18,000000 OK Succes нельзя ли в таком виде отбросить лишнее отображение ок и третей строки? а также чо он не округляет цифры? Как округлить до тысячных или до сотых или десятых если на конце 0. К целым то понятно есть round или trunc а вот до тысячных не знаю. Задать бы как что бы после запятой или точки копировало 3 цифры то можно было бы использовать функцию Delete, но не известно из скольких символов будет состоять целая часть
|
|
|
|
FREEON |
27.6.2019, 20:53
|
Journeyman
Сообщений: 365
Регистрация: 14.2.2017 Группа: Пользователи Наличность: 1182
Пользователь №: 18.346
Возраст: 25
|
Цитата(Fors1k @ 27.6.2019, 19:35) Имеется в виду, что дробные числа будут только в аргументах? На выходе устроит целое число?
Не, результат тоже нужен был нецелым(если таковым получается). Так как нецелое можно представить в виде: 2,5 = 25/10 1,66 = 166/100 и т.д.
|
|
|
|
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|