Математическая изюминка

17.04.14

Разработка - Математика и алгоритмы

На суд публики предлагается математическая изюминка: обработка с обычным (не СКД) запросом, извлекающим корни нужной степени с относительной точностью в 6 разрядов.

Скачать файлы

Наименование Файл Версия Размер
корень любой степени в запросе
.epf 8,35Kb
16
.epf 1.0 8,35Kb 16 Скачать

Мотивы использования в запросах несколько более сложных числовых функций, чем +-/*, могут быть разными. Такое, хотя и редко, но бывает нужно, и в светлых головах исследователей 1С, не обладающей подобными возможностями, родилось решение для извлечения в запросе квадратного корня: //infostart.ru/public/204916/. Это решение обладает определенными ограничениями по диапазону входных данных, выходной точности, ну и самое главное - умеет извлекать только квадратный корень. А если уж он Вам понадобился, то может пригодиться и кубический, и что же теперь, всю "арифметику" заново переписывать?

Нет уж, лучше вспомнить про алгебру и начала анализа и реализовать более совершенный алгоритм, не без использования, конечно, динамического принципа формирования текста запроса. Все уложилось на 65 строчках, из которых половина - вспомогательно-интерфейсные. Считать умеет с относительной погрешностью 1/1000000, что обусловлено ограничением со стороны арифметики СУБД в 9 разрядов после запятой (по крайней мере, в моей скромной файловой версии 1С 8.2.) Ограничения на диапазон происходят оттуда же: если Вы решите использовать данный запрос/обработку для возведения в 15 (или -15, почему нет!) степень, числа больше 10 не подойдут - соответствующие поля будут заполнены NULLнулями чтобы предотвратить ошибку исполнения запроса.

Ну что, хоть немножко заинтриговались? Тогда прошу оценить мой скромный труд, буду рад полезным комментариям!

динамический запрос

См. также

Метод Дугласа-Пойкера для эффективного хранения метрик

Математика и алгоритмы Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    1754    stopa85    12    

33

Алгоритм симплекс-метода для решения задачи раскроя

Математика и алгоритмы Бесплатно (free)

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    4424    user1959478    50    

34

Регулярные выражения на 1С

Математика и алгоритмы Инструментарий разработчика Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

Что ж... лучше поздно, чем никогда. Подсистема 1С для работы с регулярными выражениями: разбор выражения, проверка на соответствие шаблону, поиск вхождений в тексте.

1 стартмани

09.06.2023    7464    4    SpaceOfMyHead    17    

56

Модель распределения суммы по базе

Математика и алгоритмы Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    7855    7    kalyaka    11    

44

Изменения формата файлов конфигурации (CF) в 8.3.16

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Дополнение по формату файлов конфигурации (*.cf) в версии 8.3.16.

16.12.2021    4446    fishca    13    

36

Интересная задача на Yandex cup 2021

Математика и алгоритмы Бесплатно (free)

Мое решение задачи на Yandex cup 2021 (frontend). Лабиринт. JavaScript.

12.10.2021    8840    John_d    73    

46

Механизм анализа данных. Кластеризация.

Математика и алгоритмы Анализ учета Платформа 1С v8.3 Анализ и прогнозирование Бесплатно (free)

Подробный разбор, с примером использования, встроенного механизма кластеризации 1С.

31.08.2021    7807    dusha0020    8    

70
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. iceflash 4 18.04.14 19:02 Сейчас в теме
А написать в статье о методике/алгоритме "жадность" не позволяет? ;)
2. agrustny 19 19.04.14 01:52 Сейчас в теме
(1) iceflash, ну Вы страшно торопите события. Маркетинг же ведь ;).
Не, парни, а что, кому-то действительно интересно, как оно работает?
3. agrustny 19 19.04.14 01:55 Сейчас в теме
4. agrustny 19 19.04.14 03:41 Сейчас в теме
Поскольку Boxing iceflash припер меня к канатам и обещал нокаутировать, я страшно испугался и вынужден сообщить некоторые наводящие соображения.
Факты
1) x^m=1/(1/x)^m (детсад)
2) (1+y)^m=exp(m*ln(1+y))=1+m*y+... (школа)
3) ln(1+y) имеет бесконечнократную точку ветвления при y=-1 (универ)
4) Горилла в супермаркете! Лев в пустыне (клиника)
(http://infostart.ru/public/262300/ - профессор Эльдорадович!)
5) Ура, 1С 8.2. поддерживает УФ пакетные запросы (желтая пресса)
Следствия
1) Можно рассматривать только 2^0=1<x<2^64
(кстати, 2^64 - это больше, чем госдолг США согласно примечанию2 к статье http://infostart.ru/public/204916/ и бюджет раджи согласно притче о шахматах)
2) Для 1<x<2^{1/64}=1.01 получить точный результат можно, взяв 3-4 первых члена ряда.
3) Для x>2 ряд расходится, поэтому ничего не получится, даже с 10^8 членами ряда, черт побери (((
(на самом деле, вариант неплохой, бывает что радиус сходимости нулевой, тогда только Паде-Борель...)
4) Лёва-лёва, где твоя улыбка, полная задора и огня?
Короче, если 2^32<x<2^64, решаем задачу для x1=2^{-32}x, учтя, что x^m=(2^{32}*x1)^m=2^{32*m}*x1^m, иначе x1=x
Если 2^16<x1<2^32, вводим x2=2^{-16}x1, а x1^m=(2^{16}*x2)^m=2^{16*m}*x2^m, иначе x2=x1
Звер считается пойманным на 12 шаге, при 2^{1/64}.
Иначе говоря, время извлечения корня - ln(ln($100500$)), но поскольку доступа к мантиссе и порядку у нас нет, получается не 8, а 12, и не с машинной точностью, а похуже. На самом деле, извлечение корня и на уровне ЦРУ ЦП - достаточно затратная операция, и это иногда учитывается при выборе алгоритмов разложения матриц.
5) Всю эту клинику можно реализовать в желтом конфигураторе, и легко. Основную часть текста запроса формируем в цикле "Для Ы=1 По 12 Цикл", переведя Если из п.4 в КАДА-ТАДА и скидывая данные по цепочке временных таблиц Табл0->Табл1->Табл2->...->Табл12. Но! Откуда ж возьмутся в запросе 2^32 и тем более 2^{32*m} из п.4? Это будут параметры, дорогие товарищи, ведь никто не запрещал использовать функцию Pow до запуска запроса, не правда ли? Ну а если вдруг придут фашисты ее отменят - уйдем в лес напишем ее сами по образу и подобию крепкого орешка математической изюминки.

Очнувшись, дон Кихот видит врагов числом более двух сотен, которым они с Санчо противостоят вдвоем. Однако трусливый слуга убегает, а рыцарь вызывает разбойников на бой именем Дульсинеи. В одно мгновение он повержен и связан. Разбойники бьют его и по приказу главаря разжигают костер, вокруг которого затевают пляску. Дон Кихот не отвечает на их насмешки и угрозы сжечь или повесить его. Он обращается к Творцу с мольбой принять его душу. Главарь разбойников взволнован и просит дон Кихота рассказать о себе. Тот видит долг странствующего рыцаря в защите слабых, борьбе со злом. Разорвав путы, он требует вернуть колье обожаемой дамы. Разбойники тронуты, главарь, сняв шляпу и встав на колени, вручает колье дон Кихоту. Рыцарь благословляет разбойников.

топ-топ-топ
DAnry; AlexSunS; Pavl0; +3 Ответить
5. agrustny 19 19.04.14 03:57 Сейчас в теме
Все плохо есть нечего Что за фигня с "меньше"? СП читать?
-----------------------------------------------------------------------
Поскольку Boxing iceflash припер меня к канатам и обещал нокаутировать, я страшно испугался и вынужден сообщить некоторые наводящие соображения.
Факты
1) x^m=1/(1/x)^m (детсад)
2) (1+y)^m=exp(m*ln(1+y))=1+m*y+... (школа)
3) ln(1+y) имеет бесконечнократную точку ветвления при y=-1 (универ)
4) Горилла в супермаркете! Лев в пустыне (клиника)
(http://infostart.ru/public/262300/ - профессор Эльдорадович!)
5) Ура, 1С 8.2. поддерживает УФ пакетные запросы (желтая пресса)
Следствия
1) Можно рассматривать только
2^0=1<x<2^64

(кстати, 2^64 - это больше, чем госдолг США согласно примечанию2 к статье http://infostart.ru/public/204916/ и бюджет раджи согласно притче о шахматах)
2) Для
1<x<2^{1/64}=1.01
получить точный результат можно, взяв 3-4 первых члена ряда.
3) Для
x>2
ряд расходится, поэтому ничего не получится, даже с 10^8 членами ряда, черт побери (((
(на самом деле, вариант неплохой, бывает что радиус сходимости нулевой, тогда только Паде-Борель...)
4) Лёва-лёва, где твоя улыбка, полная задора и огня?
Короче, если
2^32<x<2^64
, решаем задачу для x1=2^{-32}x, учтя, что x^m=(2^{32}*x1)^m=2^{32*m}*x1^m, иначе x1=x
Если
2^16<x1<2^32
, вводим x2=2^{-16}x1, а x1^m=(2^{16}*x2)^m=2^{16*m}*x2^m, иначе x2=x1
Звер считается пойманным на 12 шаге, при 2^{1/64}.
Иначе говоря, время извлечения корня - ln(ln($100500$)), но поскольку доступа к мантиссе и порядку у нас нет, получается не 8, а 12, и не с машинной точностью, а похуже. На самом деле, извлечение корня и на уровне ЦРУ ЦП - достаточно затратная операция, и это иногда учитывается при выборе алгоритмов разложения матриц.
5) Всю эту клинику можно реализовать в желтом конфигураторе, и легко. Основную часть текста запроса формируем в цикле "Для Ы=1 По 12 Цикл", переведя Если из п.4 в КАДА-ТАДА и скидывая данные по цепочке временных таблиц Табл0->Табл1->Табл2->...->Табл12. Но! Откуда ж возьмутся в запросе 2^32 и тем более 2^{32*m} из п.4? Это будут параметры, дорогие товарищи, ведь никто не запрещал использовать функцию Pow до запуска запроса, не правда ли? Ну а если вдруг придут фашисты ее отменят - уйдем в лес напишем ее сами по образу и подобию крепкого орешка математической изюминки.

Очнувшись, дон Кихот видит врагов числом более двух сотен, которым они с Санчо противостоят вдвоем. Однако трусливый слуга убегает, а рыцарь вызывает разбойников на бой именем Дульсинеи. В одно мгновение он повержен и связан. Разбойники бьют его и по приказу главаря разжигают костер, вокруг которого затевают пляску. Дон Кихот не отвечает на их насмешки и угрозы сжечь или повесить его. Он обращается к Творцу с мольбой принять его душу. Главарь разбойников взволнован и просит дон Кихота рассказать о себе. Тот видит долг странствующего рыцаря в защите слабых, борьбе со злом. Разорвав путы, он требует вернуть колье обожаемой дамы. Разбойники тронуты, главарь, сняв шляпу и встав на колени, вручает колье дон Кихоту. Рыцарь благословляет разбойников.

топ-топ-топ
6. agrustny 19 19.04.14 04:02 Сейчас в теме
7. agrustny 19 19.04.14 04:06 Сейчас в теме
Поскольку Boxing iceflash припер меня к канатам и обещал нокаутировать, я страшно испугался и вынужден сообщить некоторые наводящие соображения.
Факты
1) x^m=1/(1/x)^m (детсад)
2) (1+y)^m=exp(m*ln(1+y))=1+m*y+... (школа)
3) ln(1+y) имеет бесконечнократную точку ветвления при y=-1 (универ)
4) Горилла в супермаркете! Лев в пустыне (клиника)
(http://infostart.ru/public/262300/ - профессор Эльдорадович!)
5) Ура, 1С 8.2. поддерживает УФ пакетные запросы (желтая пресса)
Следствия
1) Можно рассматривать только 2^0=1<x<2^64
(кстати, 2^64 - это больше, чем госдолг США согласно примечанию2 к статье http://infostart.ru/public/204916/ и бюджет раджи согласно притче о шахматах)
2) Для 1<x<2^{1/64}=1.01 получить точный результат можно, взяв 3-4 первых члена ряда.
3) Для x>2 ряд расходится, поэтому ничего не получится, даже с 10^8 членами ряда, черт побери (((
(на самом деле, вариант неплохой, бывает что радиус сходимости нулевой, тогда только Паде-Борель...)
4) Лёва-лёва, где твоя улыбка, полная задора и огня?
Короче, если 2^32<x<2^64, решаем задачу для x1=2^{-32}x, учтя, что x^m=(2^{32}*x1)^m=2^{32*m}*x1^m, иначе x1=x
Если 2^16<x1<2^32, вводим x2=2^{-16}x1, а x1^m=(2^{16}*x2)^m=2^{16*m}*x2^m, иначе x2=x1
Звер считается пойманным на 12 шаге, при 2^{1/64}.
Иначе говоря, время извлечения корня - ln(ln($100500$)), но поскольку доступа к мантиссе и порядку у нас нет, получается не 8, а 12, и не с машинной точностью, а похуже. На самом деле, извлечение корня и на уровне ЦРУ ЦП - достаточно затратная операция, и это иногда учитывается при выборе алгоритмов разложения матриц.
5) Всю эту клинику можно реализовать в желтом конфигураторе, и легко. Основную часть текста запроса формируем в цикле "Для Ы=1 По 12 Цикл", переведя Если из п.4 в КАДА-ТАДА и скидывая данные по цепочке временных таблиц Табл0->Табл1->Табл2->...->Табл12. Но! Откуда ж возьмутся в запросе 2^32 и тем более 2^{32*m} из п.4? Это будут параметры, дорогие товарищи, ведь никто не запрещал использовать функцию Pow до запуска запроса, не правда ли? Ну а если вдруг придут фашисты ее отменят - уйдем в лес напишем ее сами по образу и подобию крепкого орешка математической изюминки.

Очнувшись, дон Кихот видит врагов числом более двух сотен, которым они с Санчо противостоят вдвоем. Однако трусливый слуга убегает, а рыцарь вызывает разбойников на бой именем Дульсинеи. В одно мгновение он повержен и связан. Разбойники бьют его и по приказу главаря разжигают костер, вокруг которого затевают пляску. Дон Кихот не отвечает на их насмешки и угрозы сжечь или повесить его. Он обращается к Творцу с мольбой принять его душу. Главарь разбойников взволнован и просит дон Кихота рассказать о себе. Тот видит долг странствующего рыцаря в защите слабых, борьбе со злом. Разорвав путы, он требует вернуть колье обожаемой дамы. Разбойники тронуты, главарь, сняв шляпу и встав на колени, вручает колье дон Кихоту. Рыцарь благословляет разбойников.

топ-топ-топ
8. agrustny 19 19.04.14 04:08 Сейчас в теме
Нельзя так издеваться над старым больным человеком!
9. Evil Beaver 8107 24.04.14 12:42 Сейчас в теме
Я что-то не понял, или agrustny разговаривает сам с собой? А где комментарии остальных? Инфостарт глючит чтоле...
10. agrustny 19 24.04.14 15:14 Сейчас в теме
Оставьте свое сообщение