|
Математические операции с плавающей точкой. |
|
|
DarkMaster |
26.10.2015, 18:57
|
          
Модератор UOPilot
Сообщений: 9.764
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29990
Пользователь №: 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 килобайт )
Кол-во скачиваний: 4329
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____ Контакт актуален, подпись актуальна.
|
|
|
|
|
  |
Ответов
DarkMaster |
27.7.2019, 23:58
|
          
Модератор UOPilot
Сообщений: 9.764
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29990
Пользователь №: 11.279

|
Fors1k, не нужно воспринимать это так в штыки. Вы можете использовать любые языки, вам никто не запрещает и имелось ввиду совсем иное. Lua был встроен чтобы решить очень многие проблемы пилота в части скриптового движка - они были при этом решены. Вы по своим соображениям выбираете старый синтаксис, который не содержит этих решений. Это ваше право и никто его не отбирает, но со стороны возникают логичные вопросы о целесообразности данных действий и вам намекают, что возможно стоит перестать хвататься за старое, но столь привычное. Есть некоторые старые очень объемные вещи и у меня, которые я не готов переводить на луа, но каждый раз, когда нужно что-то там править для меня это целая беда . Присмотритесь, возможно пришло время и не более того. Цитата Я еще хочу дописать возможность делать сравнения a > b ; a < b ; a = b. И я буду вам благодарен Сообщение отредактировал DarkMaster - 28.7.2019, 0:01
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____ Контакт актуален, подпись актуальна.
|
|
|
|
Fors1k |
28.7.2019, 1:54
|

    
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.746

|
Цитата(DarkMaster @ 27.7.2019, 23:58)  Цитата Я еще хочу дописать возможность делать сравнения a > b ; a < b ; a = b. И я буду вам благодарен Вроде доделал. ...................................................... call m $var <arg1> <sign> <arg2> if $var ... end_if...................................................... При повторном/многократном сравнении через одну и ту же переменную($if) следует использовать запись: call m "$var" <arg1> ? <arg2> .Код call m $a 5.409 * 2.7 log $a call m $if $a > 10.25 if $if log Yes else log No end_if end_script
Совет:
Для использования нужно скачать файл.
math.txt ( 1004 байт )
Кол-во скачиваний: 4567В пилоте кликнуть Скрипт->Открыть файл процедур..
--------------------
Для связи
|
|
|
|
Сообщений в этой теме
DarkMaster Математические операции с плавающей точкой. 26.10.2015, 18:57 cirus
set %a math.dbl (12.1 / 3) 27.10.2015, 2:33 DarkMaster Спасибо. 27.10.2015, 6:08 cirus set %a math.dbl (1234,567 / 37)
log %a ... 13.11.2015, 2:26 DarkMaster Надо тыкать кнайта. Что-то не так с областями види... 13.11.2015, 11:14 DarkMaster Проблема оказалась в изменении локали плагином для... 2.4.2016, 10:21 cirus Так с точкой также результат 0. 2.4.2016, 10:41 DarkMaster Дык в том то и фишка, что он запятую требует после... 2.4.2016, 10:49 cirus Так плагин с точкой тоже должен работать.
set %b W... 2.4.2016, 11:01 DarkMaster
Должен, пока другой плагин не подменил локаль.
Сч... 2.4.2016, 11:22 cirus Т.е. только перезагружать плагины?
set %b WindowSt... 2.4.2016, 12:07 DarkMaster Ну пока - да. Вообще могу под запятую быро скомпил... 2.4.2016, 12:18 FREEON Есть в 2019 году способ умножения десятичных чисел... 15.6.2019, 1:19 Fors1k
Есть в 2019 году способ умножения десятичных чисе... 27.6.2019, 19:35  FREEON
Имеется в виду, что дробные числа будут только в ... 27.6.2019, 20:53 cirus
Плагин использовать или писать скрипт на луа. 15.6.2019, 2:26 FREEON а чо когда выполняю такой код
set %arr [1 13... 15.6.2019, 15:04 Fors1k
Задать бы как что бы после запятой или точки копи... 27.6.2019, 22:36 Fors1k
Нельзя ли отбросить лишнее отображение ок и трете... 7.7.2019, 4:02 cirus В первом посте пример есть:
set %a math.dbl (1... 15.6.2019, 19:08 FREEON
В первом посте пример есть:
set %a math.dbl ... 15.6.2019, 19:40 cirus
Лучше луа для этого. Синтаксис пилота не слишком ... 15.6.2019, 20:44 Fors1k Оставит после зяпятой нужное количество знаков, ил... 27.6.2019, 22:59 Fors1k Пример
59,4/11+2,3*2
set %a math.dbl (59.4 / 1... 28.6.2019, 0:58 Fors1k Ну наконец-то я придумал как это провернуть) https... 24.7.2019, 3:20 Cockney "...плакали, кололись, но продолжали грызть к... 24.7.2019, 12:56 Fors1k
"...плакали, кололись, но продолжали грызть ... 24.7.2019, 14:40 DarkMaster
Lua 27.7.2019, 19:13 Fors1k
Lua
Данный топик иммет какое-либо отношение к лу... 27.7.2019, 19:33 Fors1k Добавил возможность через switch сделать ветвление... 2.8.2019, 0:23 Fors1k Добавил условие неравенства.
При повторном/многок... 15.8.2019, 18:44 minfin ВАХ, спасибо БОЛЬШОЕ, Форсик.
трое суток учил Lua... 27.11.2019, 8:00 Fors1k
ВАХ, спасибо БОЛЬШОЕ, Форсик.
U MAKE MY DAY.
mi... 28.11.2019, 20:00
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|