Здравствуйте, гость ( Вход | Регистрация )

> Математические операции с плавающей точкой.
DarkMaster
сообщение 26.10.2015, 18:57
Сообщение #1


***********

Модератор UOPilot
Сообщений: 9.468
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27737
Пользователь №: 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 килобайт ) Кол-во скачиваний: 1613


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
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
DarkMaster   Fors1k, не нужно воспринимать это так в штыки. Вы ...   27.7.2019, 23:58
Fors1k   И я буду вам благодарен Вроде доделал. ............   28.7.2019, 1:54
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


Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 28.4.2024, 10:17
Designed by Nickostyle