|
|
|
Максимально быстрый вариант вычисления sinf/cosf27.07.2014, 00:48. Показов 6283. Ответов 17
Метки нет (Все метки)
Вопрос, возможно, не в ту ветку форума, но решение предполагается на с++, поэтому просьба расшифровать задание.
Текст такой: Напишите пред-расчетный (максимальность быстрый) вариант вычисления sinf/cosf по таблице с точностью до сотых. Вопрос - что нужно сделать?! А то я не понял.
0
|
|
| 27.07.2014, 00:48 | |
|
Ответы с готовыми решениями:
17
Более быстрый вариант сравнения фотографий Запрос данных с экрана максимально быстрый Быстрый поиск максимально похожего слова |
|
763 / 270 / 57
Регистрация: 13.12.2009
Сообщений: 1,110
|
||||||
| 27.07.2014, 05:38 | ||||||
|
Sin он и в Африке Sin;
1
|
||||||
|
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
||||||
| 27.07.2014, 07:50 | ||||||
|
Думаю что-то вроде этого (об оптимальности не говорю):
Кликните здесь для просмотра всего текста
1
|
||||||
|
Заблокирован
|
|
| 27.07.2014, 07:58 | |
|
А в чём прикол то ? Функция sinf не устраивает? Её ж тоже не дураки писали
![]() Не думаю что даже на уровне ассемблера под Intel можно что - то улучшить .... Добавлено через 1 минуту Да и вообще ТС юзает шарп или по крайней мере CLR, что к данному трею никакого отношения не имеет
0
|
|
|
763 / 270 / 57
Регистрация: 13.12.2009
Сообщений: 1,110
|
|
| 27.07.2014, 08:33 | |
|
нужно подставить функцию sinf и проверить результат. В чем трудность не пойму???
0
|
|
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||||||
| 27.07.2014, 11:42 | ||||||
1
|
||||||
|
|
||
| 27.07.2014, 13:54 | ||
Сообщение было отмечено Robesper3411 как решение
Решение
Я не сильно разбираюсь в алгоритмах, но, думается, смысл задания следующий. Синус и косинус вычисляется через разложение в ряд или что-то типа того. Реализацию в glibc можно посмотреть
https://sourceware.org/git/?p=... .c;hb=HEAD https://sourceware.org/git/?p=... .c;hb=HEAD функция sin является как бы обёрткой, которая произвольное значение аргумента сводит к диапазону [0, pi/4] (и отсекает кривые случаи), а функция ksinf уже вычисляет синус для аргумента [0, pi/4]. Внутри ksinf'а есть вычисление ряда. Думается, если из формулы выкинуть хвост, то результат получится менее точный, но зато более быстро вычисляемый Добавлено через 47 секунд Тьфу блин, не заметил про таблицу ![]() Добавлено через 3 минуты Вот есть таблица синусов http://www.webmath.ru/poleznoe/table_sinus.php статически заполняешь этими значениями массив данных. Затем, на пальцах, если тебе нужно вычислить синус от нуля градусов, то возвращаешь нулевой элемент таблицы, если синус одного градуса - первый элемент таблицы и т.п. Если нужно вычислить синус от 1.6 градуса, то вычисляешь значение, предполагая, что между 1 и 2 градусами имеем линейную зависимость. При таком раскладе как раз попадёшь в требуемую точность. Ну и надо учесть, что тебе аргумент будет в радианах передаваться, а не в градусах Добавлено через 6 минут
2
|
||
|
2642 / 1653 / 267
Регистрация: 19.02.2010
Сообщений: 4,381
|
||
| 27.07.2014, 21:40 | ||
|
Начиная с ПняПро или Пня2 - есть и команда fsincos, вычисляющая для одного значения сразу 2 названных функции, что экономит время вдвое (для тех программ, где нужны сразу оба значения функций для одного и того же аргумента).
0
|
||
|
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
||
| 27.07.2014, 21:58 | ||
|
0
|
||
|
2642 / 1653 / 267
Регистрация: 19.02.2010
Сообщений: 4,381
|
|
| 27.07.2014, 22:00 | |
|
0
|
|
|
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
||
| 27.07.2014, 22:30 | ||
|
0
|
||
|
|
|
| 27.07.2014, 23:48 [ТС] | |
|
я вот только все равно не понял - в чем суть задания. Что должно быть "на входе", а что - "на выходе". Вычислять синус и косинус - это без проблем. Но, что сделать нужно здесь?!
0
|
|
|
|
|
| 28.07.2014, 05:53 | |
|
Robesper3411, так это не к нам вопрос
Но если я правильно понимаю логику таких задач, таблица у вас уже есть/кем-то задана (списана с какой-нибудь книжки 50-х). Для промежуточных значений - интерполяция, можно хоть линейную.
0
|
|
|
|
|||
| 28.07.2014, 11:17 | |||
Сообщение было отмечено Robesper3411 как решение
Решение
0
|
|||
|
2642 / 1653 / 267
Регистрация: 19.02.2010
Сообщений: 4,381
|
||
| 03.08.2014, 21:44 | ||
|
Не 200 - а порядка 100 (если не брать огрызки типа Атомов). В общем, у Агнера Фога в мануале по проц.командам хорошо расписаны растактовки для кучи процессоров. Во вторых - я и не утверждал, что короткая прога всегда будет более быстрой. Просто при таблицах - будет как минимум одно деление (тоже времязатратная команда), и если этап с делениями ещё и можно будет векторизовать - то потом по таблице всё равно для каждого индекса придётся бегать по-отдельности (тут могу и ошибаться - может, где-нить в SSE4 и есть нужная команда, но в таком случае рискуем потерять портируемость на вполне ещё пригодные для работы компутеры с процами на пару поколений назад). Просто син-кос - довольно скользкий для оптимизации пример (макс. выигрыш - ну, будет ускорение в разы, а вокруг ускоренного фрагмента же лежит неускоренная остальная программа, и весь выигрыш может замаскироваться (ну, будет прога работать 99 сек вместо 100 - толку от этого?)). Вот если бы была exp() - там да, её можно аппроксимировать и векторизовать всего несколькими командами, и ничего сложнее умножения при этом не будет (рецепт опубликован буржуинами в статьях 1999 и 2008годов, у меня работает - но никому подробности не расскажу, ибо ускорение выходит во многие десятки раз, и ноу-хау поэтому пусть остаётся скрытым для ширнармасс). Таблиц при аппроксимации exp() в данном случае нет, аппроксимация тоже идёт не через приближение полиномами (или чем-то иным) - а совсем на иной идее. Ну и топикстартеру. Может, стоит переделать алгоритм/задачу так, чтобы синус-косинус не вычислять. Вернее, чтобы взамен аргумента этих функций получались сразу индексы в таблице. Т.е., например, получались углы в градусах. И хорошо, если они будут получаться в виде целых значений - чтобы затем не округлять, а то округление плавучки тоже бывает тормозным: я, например, при работе с компилятором от Борланда/Ембаркадеро в критических местах в явную вписываю вызов своей собственной функции FtoI(val) вместо округления через приведение типа, т.е. через (int)val - а то Борланд реализует приведение типа (и округление) через вызов дольше работающей функции с именем ftol или где-то рядом.
0
|
||
|
|
||||
| 03.08.2014, 23:06 | ||||
|
0
|
||||
|
2642 / 1653 / 267
Регистрация: 19.02.2010
Сообщений: 4,381
|
||
| 10.08.2014, 21:18 | ||
|
Под делением имел в виду idiv именно для впихивания (округлённого до целого) результата умножения в один период (в размер таблицы) Ладно, всё, закончили.
0
|
||
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
|
|||||||
| 10.08.2014, 21:29 | |||||||
|
то нужно создать таблицу синусов(косинусов) а потом к ней обращаться,по моему так например синус от 0 до 90 с шагом 1 градус
0
|
|||||||
| 10.08.2014, 21:29 | |
|
Помогаю со студенческими работами здесь
18
Максимально бюджетный вариант стримерского игрового ПК Посоветуйте, пожалуйста, максимально бюджетный вариант Максимально быстрый способ добавления миллионов объектов в коллекцию Хочу собрать максимально быстрый конфиг, бюджет ограничен (3500грн-4500грн)
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|