Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Ух ты - прикольно! Спасибо. А я думал - каждый раз считает. Ну да логично, можно и на этапе компиляции уже посчитать.
Тогда так:
Правда было бы правильнее вместо 53 писать DBL_MANT_DIG
Случай минимального выигрыша, если все значения double дробные.
1. Ваша реализация неполная, её можно использовать только если заранее известен диапазон возможных значений.
Вот код полной реализации
2. Самописные функции значительно уступают в скорости встроенным при компиляции под отладку, когда оптимизации отключены.
1. Ваша реализация неполная, её можно использовать только если заранее известен диапазон возможных значений.
Вот код полной реализации
2. Самописные функции значительно уступают в скорости встроенным при компиляции под отладку, когда оптимизации отключены.
Спасибо большое, Ильяс, за отменный код.
Конечно же union здесь отличный помощник.
Изучаю...
ЗЫ А этот вариант точно не тоже самое?Николай, привет. Вижу, ты занимаешься графикой, но не до конца понимаю, в чем, собственно, задача. Над чем ты работаешь?
Ускорение функций отрисовки?
Вообще, если говорить по теме ветки, мне удалось реализовать полностью альтернативный подход к рисованию на канвасе. Не используя класс CCanvas.
То есть, не модифицировать отдельный набор функций, а создать цельный механизм рисования, состоящий из одного блока.
(Конечно, я едва ли могу все это продемострировать в коде, поскольку кода очень много и написан он нестандартно, но хотел бы рассказать в общих чертах).
И так:
1. Блок (функция)
принимает всего 2 параметра - Канвас и Элемент.
2. За каждым МТ-объектом закреплен свой ресурс. Он сразу загружается в "массив пикселей" с помощью ResourceReadImage(); Если ресурса еще не существует, ставится флаг, который в последствии определит диапазон цикла по ядру.
3. Ядро, - массив свойств всех элементов. В нем имеются и данные по размерам объектов, и по цветам для различных состояний. И множество других данных. Всего 235 свойств для каждого объекта. При этом, каждый элемент (в зависимости от типа) может содержать от одного, до 11-ти объектов (ограничений нет).
4. В блоке Рисования, под каждым объектом подразумевается "Деталь" рисунка. Следовательно, цикл по объектам в ядре, это цикл рисования, в котором создается изображение каждой Детали. Если Канвас еще не был создан, то делается полный цикл по всем Деталям только данного Канваса. Принадлежность к Канвасу прописана в ядре, у каждой Детали. То есть, все Канвасы, (и Детали) имеют свои порядковые номера. Через эти номера обеспечивается возможность рисовать содержимое только нужного Канваса.
4. Если Канвас уже существует и его изображение загружено в массив пикселей, а нам нужно перерисовать только отдельный элемент (например, на событии изменения цвета), то диапазон цикла по ядру сужается до границ одного элемента, номер которого был получен функцией рисования.
Само рисование простое. Это цикл по ячейкам одномерного массива слева направо. Перед циклом устанавливаются:
1. Начальная ячейка (точка А).
2. Конечная ячейка (Точка В).
3. Перешагивание.
Сложно вкратце рассказать о работе блока состоящего из 1500 строк кода. Это одна функция, которая росла и шлифовалась 20 месяцев. Я знаю ее почти наизусть, что дает возможность легко продолжать ее развитие.
За счет использования ядра и фокуса (помещение важных переменных на глобальную область), блок обретает огромные возможности. Их границы мне по сей день не видны.
Вот такая альтернатива стандартному подходу к рисованию на канвасе.
зы. Если интересуют детали, могу пояснить.
Вот так выглядит начало блока:
1. Ваша реализация неполная, её можно использовать только если заранее известен диапазон возможных значений.
Вот код полной реализации
Спасибо большое еще раз за код. Поломал голову с этими битовыми масками типа double. Оказалось не все так просто, как думал раньше.
Я чуть подкорректировал свой вариант под Ваш. Отличие было только одно: Ваш вариант возвращал при значениях от -1>x>0 Ceil(-0.1)= - 0.0, а мой 0.0 . Правда не понятно, когда это может пригодиться.
И получилось следующее:
То же самое, только читабельно и с комментариями:
Я написал скрипт(прилагаю), который подтверждает 100% идентичность работы с Вашим вариантом.
Но при этом данный вариант быстрее, компактнее и, как мне кажется, читабельнее.
Причем в теле функции даже не создается ни одной переменной, тогда как у Вас создается 4 8-байтных переменных.
Может я не прав?
Результаты, когда во входном x всегда есть дробная часть:
Результаты, когда во входном x дробная часть редкое явление:
2. Самописные функции значительно уступают в скорости встроенным при компиляции под отладку, когда оптимизации отключены.
Непонятно, зачем при отладке нужна скорость.
Но если очень нужна, то, как вариант, можно использовать конструкцию:
И еще непонятка одна у меня осталась:
Почему в документации и по факту DBL_MANT_DIG = 53 ?
тогда как согласно той же Википедии = 52.
И, вроде как, из Вашего кода тоже следует, что 52 ?
Николай, привет. Вижу, ты занимаешься графикой, но не до конца понимаю, в чем, собственно, задача. Над чем ты работаешь?
Ускорение функций отрисовки?
Привет, Петр!
В личку отвечу.
И еще непонятка одна у меня осталась:
Почему в документации и по факту DBL_MANT_DIG = 53 ?
тогда как согласно той же Википедии = 52.
И, вроде как, из Вашего кода тоже следует, что 52 ?
А самостоятельно не пробовали найти ответ на вопрос?
Подсказка: в строке поиска google указать "DBL_MANT_DIG 53 52"