Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Поиск Min-Max в стеке FIFO
|
|||
|---|---|---|---|
|
#18+
m_Sla, спасибо за код, но я в некоторых непонятках. m_Sla Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 1. Если я правильно понимаю, то структуры в C++, это как пользовательские типы в VBA. Но это ведь имеет смысл, если участвуют данные разных типов, а у меня ведь все лонги. 2. Ну, пусть структура. Но я в этом коде не увидел, ни как передать ее в длл из VBA, ни как выплюнуть результаты вычислений обратно. Это же пример лишь как ворочать ее внутри длл. Повторюсь (уточню). В длл я должен передать вновь поступившие показания нескольких датчиков. Они (по твоему коду) будут сохранены в массивах data (у тебя он один, но можно добавить ему измерение). Сейчас я передаю их параметрами, а хотелось бы - массивом. Или типом, т.к. из VBA, чтобы он был проинтерпретирован внутри как структура. Из длл я должен получить минмаксы по каждому из датчиков. Массивом ли, струтурой ли (преобразованной как-то обратно в тип), но не цепочкой обращений за мин, за макс, за чем-то там еще. Правильно я понимаю, что невозможно передать из VBA в сишную длл параметр по ссылке? Чтобы в VBA этот параметр отразил модифицированное внутри длл его значение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2013, 12:10 |
|
||
|
Поиск Min-Max в стеке FIFO
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov[ Но, конечно, раз уж ты решил удариться в экстремизм, то нету у тебя другого выбора кроме как сканировать весь твой массив раз за разом. Решение есть , Майтон там вроде предлагал дерево. У которого с одного конца будет макс , с другого мин. Какой профит будет получен от дерева , зависит от отношения размера всей записи с параметром к размеру самого параметра измерения. Чем больше разница , тем больше будет профита от дерева. Есть массив записей рядом есть некий мап ( дерево) , в котором хранится значение параметра и индекс в массиве записей. Просканировав мап можно считать спектральную статистику значений , не продувая сковзь кеш процессора данные из записей которые не нужны для расчета. Выйти на критичные точки в массиве можно по индексу , и посмотреть на них и окресности более детально. На вставку в мап значения придется потратить некие ресурсы. Зато это потом развяжет руки в алгоритмике расчета необходимости перемещения тухеса. Приблизительно так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2013, 12:18 |
|
||
|
Поиск Min-Max в стеке FIFO
|
|||
|---|---|---|---|
|
#18+
Vladimir Baskakovа как происходит считывание данных. программа куда-то заглядывает постоянно, и если там что-то есть - запускает обработчик?Все построено на событиях класса. API предоставляет несколько классов, один из которых дает события - датчик такой-то, значение такое-то, ну и еще некую сопроводиловку. А уж что там внутри API - хз. Наверное он как-то сам опрашивает их, или они сами что-то генерят, хз... Датчики цепляются к черному ящику (или к репитерам, если длинный шланг), ящик через COM, LPT, USB и еще какую-то хрень (любой единственный, на выбор) - к компу или к серверу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2013, 12:19 |
|
||
|
Поиск Min-Max в стеке FIFO
|
|||
|---|---|---|---|
|
#18+
Vladimir Baskakovну не миллион. ну ну один меньше. или я что-то путаю(((( Вы не туда смотрите. Посмотрите на ваш код на джаве. Там совсем другое число итераций внешнего и внутреннего цикла, чем в коде на С++. Чтобы сравнивать код на двух языках, нужно чтобы они делали одно и то же. И причем достаточно долго, т.к. для мелкой задачи погрешность измерения может быть сравнима со временем работы, или даже существенно превышать его. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2013, 12:20 |
|
||
|
Поиск Min-Max в стеке FIFO
|
|||
|---|---|---|---|
|
#18+
ДохтаР , спасибо за поддержку, что концептуально я смотрю в правильном направлении. 2ALL , с минмаксами в сегодняшнем варианте мы разобрались и сделали наметки на будущее. Спасибо всем. Щаз другая задача - как эффективно передать в длл новые значения и получить обратно расчеты? Сейчас длл выглядит так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Вызов из VBA выглядит так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Возможно ли вместо отдельных параметров передавать в длл массив новых значений и обратно получить не поштучно, а массивом же? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2013, 13:29 |
|
||
|
Поиск Min-Max в стеке FIFO
|
|||
|---|---|---|---|
|
#18+
underC ДохтаР , спасибо за поддержку, что концептуально я смотрю в правильном направлении. Всегда пожалуйств :) underCЩаз другая задача - как эффективно передать в длл новые значения и получить обратно расчеты? Возможно ли вместо отдельных параметров передавать в длл массив новых значений и обратно получить не поштучно, а массивом же? Ты же сишник, :) Передай в функцию адрес массива в куче и размер. зы Тока мой тебе совет , не рисуй лапшекода с выделением памяти в приложении и удалением в библиотеке и наоборот. Выделил память в библиотеке , удаляй в билиотеке, выделил в приложении удаляй там же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2013, 13:41 |
|
||
|
Поиск Min-Max в стеке FIFO
|
|||
|---|---|---|---|
|
#18+
ДохтаРDimitry Sibiryakov[ Но, конечно, раз уж ты решил удариться в экстремизм, то нету у тебя другого выбора кроме как сканировать весь твой массив раз за разом. Решение есть , Майтон там вроде предлагал дерево. У которого с одного конца будет макс , с другого мин. Учитывая постоянные inserts/deletes в дерево оно будет переживать бешеные перебалансировки. Здесь нужно хорошо подумать. Вроде как получили профит на поиске минимакса но просадили общее время фиксации тразнакции. Кстати в топике не зря спрашивали про разрядность. Если она не велика то после записи возможно датчик будет показывать одинаковые значения длительное время. На этом можно сыграть и сжимать поток измерений. Получится что-то вроде RLE в котором искать минимаксы будет быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2013, 14:01 |
|
||
|
Поиск Min-Max в стеке FIFO
|
|||
|---|---|---|---|
|
#18+
ДохтаРТы же сишник, :) Передай в функцию адрес массива в куче и размер. зы Тока мой тебе совет , не рисуй лапшекода с выделением памяти в приложении и удалением в библиотеке и наоборот. Выделил память в библиотеке , удаляй в билиотеке, выделил в приложении удаляй там же.Да какой я сишник... Я на него, как баран на новые ворота смотрю. Вот из первого же поста:автор** C++ почти не знаю. Допиливаю чужую заготовку.Я по VBA в основном и БД :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2013, 14:07 |
|
||
|
Поиск Min-Max в стеке FIFO
|
|||
|---|---|---|---|
|
#18+
ДохтаРТы же сишник, :) Нет, он VBA-шник и писал, что С видит первый раз в жизни. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2013, 14:08 |
|
||
|
Поиск Min-Max в стеке FIFO
|
|||
|---|---|---|---|
|
#18+
mayton... после записи возможно датчик будет показывать одинаковые значения длительное время. Практически не бывает. Дребезг, шум постоянный. Как раз настораживает - когда прямая достаточно протяженная линия, ну, типа больше 10-20 отсчетов. Когда с API-шниками был внятный контакт, с ними вроде вели разговоры о модернизации входных фильтров и доступа к их тонким настройкам. Но воз так там и остался. А сейчас они вообще в эту сторону не смотрят. Страый продукт, разрабы давно поувольнялись-поумирали. Пишите, говорят сами, после API и скажите спасибо, что вообще еще все работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2013, 14:17 |
|
||
|
Поиск Min-Max в стеке FIFO
|
|||
|---|---|---|---|
|
#18+
Думаю что дреберг ортогонален к функциям управления или принятия решений. Ну тоесть если идут подряд значения типа: 127,128,127,128,... то можно как-то принять решение об использовании простого ФНЧ. Ну тоесть мы сами примем решение о том что есть собственно полезный сигнал F1 (обычно гладкий, низкочастотный) и есть какой-то шум F2 который (дребезжит и фонит на высоких частотах) но на принятие решения никак не влияет. Здесь я советов давать не могу это надо как-то самому решить на основе знаний об измеряемом объекте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2013, 14:47 |
|
||
|
Поиск Min-Max в стеке FIFO
|
|||
|---|---|---|---|
|
#18+
maytonДумаю что дреберг ортогонален к функциям управления или принятия решений. Ну тоесть если идут подряд значения типа: 127,128,127,128,... то можно как-то принять решение об использовании простого ФНЧ. Ну тоесть мы сами примем решение о том что есть собственно полезный сигнал F1 (обычно гладкий, низкочастотный) и есть какой-то шум F2 который (дребезжит и фонит на высоких частотах) но на принятие решения никак не влияет. Здесь я советов давать не могу это надо как-то самому решить на основе знаний об измеряемом объекте. Не ортогонален, дребезг, его амплитуда и частота, может влиять на средюю температуру по больнице. Нужен некий аналог аппратного фильтра. Как минимум, что бы можно было сказать, что данные измерений или какая то их часть изза наличия шумов имеют сомнительную достоверность. А то получится как я раньше говорил , что за деревьями леса не видно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2013, 15:10 |
|
||
|
Поиск Min-Max в стеке FIFO
|
|||
|---|---|---|---|
|
#18+
А какая разница, аппаратный он или программный? В данной постановке - всё равно. Аппаратный - ну просто улучшенная оптимизация. Может он вообще на аналоговой электронике будет собран. Но смысл то один. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2013, 15:27 |
|
||
|
Поиск Min-Max в стеке FIFO
|
|||
|---|---|---|---|
|
#18+
underCmayton... после записи возможно датчик будет показывать одинаковые значения длительное время. Практически не бывает. Дребезг, шум постоянный. Как раз настораживает - когда прямая достаточно протяженная линия, ну, типа больше 10-20 отсчетов. Если функция описывающая процесс, который вы меряеете не должна себя так вести, то произойдет приблизительно следующее. Вы меряеете среднюю температуру по больнице, Температура пациентов в холодильнике морга, влияет на среднюю таемпратуру таким образом, что вы не видите , что в инфекционное отделение массово поступают пациенты и сгорают от гарячки и перемащаются в морг и все начинается по следующему кругу , До тех пор, пока система не уходит в полный разнос с последствиями о которых вы говорили выше : автор"... если боевое дежурство приведо к последствиям, во избежание которых оно назначено..." Показания которые вы меряете, уже есть недостоверными , нужно искать их причину . Я бы причину сбросли на поставщиков датчиков и прочей аппаратной требухи, повесив оператору лампочку "Обнаружены недостоверные показания КИП " Важно математически формально точно обосновать принятие решения о достоверности- недостоверности значений, которые к вам поступают. . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2013, 15:34 |
|
||
|
Поиск Min-Max в стеке FIFO
|
|||
|---|---|---|---|
|
#18+
maytonА какая разница, аппаратный он или программный? В данной постановке - всё равно. Аппаратный - ну просто улучшенная оптимизация. Может он вообще на аналоговой электронике будет собран. Но смысл то один. Смысл одни , а затраты разные. Купить в Китае чипов по доллару за килограм с поствкой за месяц, или потратить пару человеко лет на програмирование от отладку смарт релюшки которая зажигает лампочку "Срочно поднять тухес". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2013, 15:39 |
|
||
|
Поиск Min-Max в стеке FIFO
|
|||
|---|---|---|---|
|
#18+
underCЩаз другая задача - как эффективно передать в длл новые значения и получить обратно расчеты? Возможно ли вместо отдельных параметров передавать в длл массив новых значений и обратно получить не поштучно, а массивом же? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2013, 15:55 |
|
||
|
Поиск Min-Max в стеке FIFO
|
|||
|---|---|---|---|
|
#18+
vromanovunderC, 1) Бъем очередь на сегменты. например, на 100. 2) на каждом сегменте храним время старта и стопа, считаем мин, макс, среднее. 3) при добавлении/удалении значения пересчитываем только значения в блоке. 4) Когда блок покидает или добавляется пересчитываются общие значения Еще одна оптимизация. При обычном поиске мин/макс в массиве делается два сравнения на элемент. Можно делать так, берем два значения из массива. сравниваем их между собой, а потом максимальный сравниваем с макс и меньший с мин. Итого получается 1.5 сравнения на элемент. Ускорение на 25% циклическая очередь, сделанная по этому принципу периваривает 1 млн случайных чисел за 78 мс - Так ли сильно нужны деревья (в данном случае)? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2013, 16:12 |
|
||
|
Поиск Min-Max в стеке FIFO
|
|||
|---|---|---|---|
|
#18+
Из ВБА вызывается с-шная DLL, и туда надо скормить массив. А где был этот массив до скармливания. Случайно не в базе ACCESS? может SELECT min(...) FROM .... Спасет радикально? От си-шной DLL c деревьями. А то я подозреваю, что время крохами экономится на работе с массивами в С++ и щедро разбрасывается внутри других подсистем... ВБА - он же чистейше интерпретируемый? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2013, 16:29 |
|
||
|
Поиск Min-Max в стеке FIFO
|
|||
|---|---|---|---|
|
#18+
m_Sla , большое спасибо за код 14225120 . Беру таймаут на реализацию. Позже отпишусь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2013, 16:32 |
|
||
|
Поиск Min-Max в стеке FIFO
|
|||
|---|---|---|---|
|
#18+
Vladimir BaskakovИз ВБА вызывается с-шная DLL, и туда надо скормить массив. А где был этот массив до скармливания. Случайно не в базе ACCESS? может SELECT min(...) FROM .... Нет. Совсем наоборот. В рекордсеты попадают уже обсчитанные данные. Приходит тик. Все считается, отображается и лишь последним шагом - в рекордсет. И то - через буфер длиной 100-200 записей (короткий, чтобы не бояться за потерю если что). Слив в рекордсет только по заполнении буфера. А все статистические ф-ции DMax, DMin и пр. что в Аксовом SQL, что под чистым VBA - тормоза дичайшие. Да и не доходит до "SELECT ..." дело :) Vladimir BaskakovСпасет радикально? От си-шной DLL c деревьями. А то я подозреваю, что время крохами экономится на работе с массивами в С++ и щедро разбрасывается внутри других подсистем... ВБА - он же чистейше интерпретируемый? Радикально - кончено же нет. Но должен же быть выигрыш. По крайней мере, когда предыдущая математика была вынесена в длл, производительность поднялась (по памяти) с 10-20 до 70-80 тыс записей в сек (это на круг, со всей требухой). Алгоритм мы все хором утвердили. Под VBA он работает уже известно как. m_Sla дал сишную заготовку. Вот реализую, сравню и отпишусь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2013, 17:02 |
|
||
|
Поиск Min-Max в стеке FIFO
|
|||
|---|---|---|---|
|
#18+
Странные все какие-то. В условиях было сказано, что главный критерий - быстродействие. Ограничений на память нет в условиях. Тогда проще и быстрее всего вести параллельно еще два стека - для хранения текущих максимумов и минимумов. Pop и Push в эти стеки делаются одновременно с pop и push в основной стек. Если известен предыдущий max и min, очевидно, что при Push-е легко вычислить текущий. Для получения текущего max и min берется верхнее значение соответствующего стека. Нагородили деревьев и сортировок... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2014, 12:12 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38779792&tid=2019267]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 11ms |
| total: | 126ms |

| 0 / 0 |
