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

17.04.14

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
корень любой степени в запросе
.epf 8,35Kb ver:1.0
16
16 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

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

См. также

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

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

1 стартмани

30.01.2024    5861    stopa85    12    

39

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

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

19.10.2023    11205    user1959478    54    

37

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

Расширение (+ обработка) представляют собою математический тренажер. Ваш ребенок сможет проверить свои знание на математические вычисление до 100.

2 стартмани

29.09.2023    5671    maksa2005    8    

26

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

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

1 стартмани

09.06.2023    13623    8    SpaceOfMyHead    20    

63

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

Три задачи - три идеи - три решения. Мало кода, много смысла. Мини-статья.

03.04.2023    6936    RustIG    9    

25

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

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

23.11.2022    6074    gzharkoj    14    

25

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

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

1 стартмани

21.03.2022    9627    7    kalyaka    11    

45
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 8273 24.04.14 12:42 Сейчас в теме
Я что-то не понял, или agrustny разговаривает сам с собой? А где комментарии остальных? Инфостарт глючит чтоле...
10. agrustny 19 24.04.14 15:14 Сейчас в теме
Оставьте свое сообщение